Повторюсь еще раз, 90% ошибок возникает из-за неправильной настройки ЦУП. Как настроить его правильно достаточно подробно описано здесь.
Перед тем как искать свою проблему здесь, убедитесь что вы все настроили верно, т.к. проблемы возникающие из-за неверной настройки здесь не описаны.
Ошибка:
Точка входа в процедуру PdhAddEnglishCounterW не найдена в библиотеке DLL pdh.dll
Решение:
- Использовать внешнюю компоненту из версии ЦУП 2.0.4.11 и изменить код при сравнении версий
- Использовать ОС не ниже Windows Vista
- Использовать версию ЦУП 2.0.4.11
Описание:
Ошибка:
Counters.cpp : 112 (0xc0000bb8) – Не удалось добавить счетчик производительности
Решение:
- Переименовать в коде именя счетчиков с английского наименования на русское (если используется русская локализация MS SQL Server). Измененные функции "ИмяСчетчикаКоличествоВзаимоблокировокMSSQL" и "ИмяСчетчикаКоличествоОжиданийMSSQL" есть в архиве.
- Счетчики в Performance Monitor могут называться и не так как в архиве, тогда пункт 1 не сработает, т.к. вам нужно будет вписать свое имя счетчиков. В этом случае нужно посмотреть точное полное название счетчика здесь: Точное название счетчика нужно смотреть в "Управление компьютером > Производительность > Средства наблюдения > Системный монитор". Спасибо за дополнение ZhiharevDmitriy
- При установке 32-битного MS SQL Server на 64-битную Windows счетчики производительности не отображаются в PerfMon и их невозможно добавить из 1С.
Утилита System Monitor (Perfmon), включенная в состав Windows x64 и используемая по умолчанию, также является 64разрядным приложением. Microsoft не предоставляет возможности собирать информацию от 32разрядных счетчиков 64разрядной утилитой System Monitor (Perfmon). Но нет ли у нас и 32разрядной версии? Да, она присутствует, поделенная на две части, одна из которых слегка замаскирована, а другая скрыта намного глубже!. Подробно решение описано здесь. Спасибо пользователю cheburashka за описание данной ошибки и решения. - Не использовать показатели «Количество взаимоблокировок» или «Количество таймаутов»
Описание:
Если выбрать показатель «Количество взаимоблокировок» или «Количество таймаутов», то ЦУП добавляет счетчики SQL Server в системный монитор (PerfMon), что бы получить эту информацию. Если добавить счетчики не получается, возникает данная ошибка.
-----------------------------------------
Ошибка:
MSSQL.cpp : 79 ( 0x0: The operation completed successfully. ) - SQL Server connection failed.
Решение:
- Создать доменного пользователя, дать ему все права предыдущего пользователя и от его имени запускать сервер ЦУП
- Сделать пользователей с одинаковым именем на SQL и на сервере ЦУП
Описание:
Возникает при анализе взаимоблокировок. Заморочки с правами доступа.
-----------------------------------------
Ошибка:
MSSQL.cpp : 79 ( 0x36b7: The requested lookup key was not found in any active activation context. ) - SQL Server connection failed.
Она же только на русском:
.\MSSQL.cpp : 79 ( 0x36b7: Указанный ключ соответствия не обнаружен ни в одном из активных контекстов активации. ) - SQL Server connection failed
Решение:
- Пользователю ОС под которым запущен клиент ЦУП и пользователю ОС под которым запущен сервер 1С на котором размещается база ЦУП, нужно дать права «Alter trace» в SQL Server, просто откройте инструкцию на шаге настройки «Трассировки» и сделайте все по шагам еще раз, только сделать это нужно для двху пользователей.
- Проверить, что у пользователя под которым запущен сервер СУБД есть доступ на чтение и на запись в указанный каталог трассировки.
Описание:
Возникает при анализе взаимоблокировок.
-----------------------------------------
Ошибка:
Ошибка при вызове метода контекста (ПрочитатьXML)
{ОбщийМодуль.АнализБлокировок1С.Модуль(975)}: Преобразование значения к типу Число не может быть выполнено
Решение:
заменить код функции «ПодготовитьБлокировки», есть в архиве.
Описание:
Ничего особенного, просто ошибка в коде
-----------------------------------------
Ошибка:
Ошибка аутентификации при попытке входа в базу ЦУП в терминале, на отдельной машине все запускается и ошибки нет
Решение:
Установить релиз платформы не ниже 8.2.15.257
Описание:
COMConnector не может найти ключ защиты из-за ошибки в платформе
Ошибка платформы «10080827 Получение лицензии объектом V82.COMConnector»
-----------------------------------------
Ошибка:
Microsoft OLE DB Provider for SQL Server: SHOWPLAN permission denied in database 'tempdb'.
Решение:
Выполнить в СУБД команду
USE tempdb
GO
GRANT SHOWPLAN TO
GO
Описание:
У пользователя SQL, под которым запущена исследуемая база, нет прав на получение плана запроса.
-----------------------------------------
Ошибка:
Иногда не удается пройти шаг включения ТЖ
Решение:
- Синхронизировать время на сервере ЦУП и на сервере исследуемой базы
- Возможна ошибка из-за летнего времени, описана здесь
- В файле conf.cfg не указано значение параметра ConfLocation. Для 8.3 там должно быть указано C:\Program Files (x86)\1cv8\conf или C:\Program Files\1cv8\conf в зависимости от разрядности платформы.
Описание:
При создании ТЖ сравнивается время файлов, если оно не совпадает ЦУП "думает" что ТЖ не создан.
-----------------------------------------
Ошибка:
{ОбщийМодуль.АнализБлокировок1С.Модуль(392)}: Ошибка при вызове метода контекста (Выполнить): {(8, 27)}: Не задано значение параметра "НачалоТранзакции"И ТЖ.МоментВремени МЕЖДУ <>&НачалоТранзакции И &МоментВремениЖертвы
Решение:
Ошибка в коде процедуры «ПодготовитьПредпологаемыхВиновников», исправленная процедура есть в архиве.
Описание:
ЦУП попытался проанализировать «отрывок» транзакции, данные по которой полностью не записались в базу, например ЦУП выключили в середине транзакции.
-----------------------------------------
Ошибка:
Не собираются оперативные показатели
Решение:
1. Не назначена роль processadmin для пользователя под которым запускается сервер 1С исследуемой базы (чаще всего)
2. "Портится" COM объект "ИБ" в процедуре ПолучитьСоединенияИБ (очень редко но бывает) - т.е. в отладчике объект есть и свойства у него есть, но при попытке использовать метод GetInfoBaseConnections получается лажа. В моей практике было всего пару раз, ловится только через отладчик. В этом случае надо заменить функцию ПолучитьСоединенияИБ, текстом из вложения. Причина не ясна.
-----------------------------------------
Ошибка:
{ОбщийМодуль.АнализБлокировок1С.Модуль(941)}: Индекс находится за границами массива
Решение:
Исправить строку 923 ОМ. АнализБлокировок1С
// заплатка на случай если СоставБлокировки[СчИзмерения] получается что-то типа "Счет-фактура 0000001 от 01.01.2001"
Если Найти(СоставБлокировки[СчИзмерения], "=") = 0 Тогда
Продолжить;
КонецЕсли;
Так же нужно исправить функцию БлокировкаРазобрана в том же модуле, вместо
Структура = Новый Структура("РежимБлокировки, Ресурс", Выборка.РежимБлокировки, Выборка.Ресурс);
Нужно написать:
Структура = Новый Структура("Режим, РежимБлокировки, Ресурс", Выборка.РежимБлокировки, Выборка.РежимБлокировки, Выборка.Ресурс);
Описание:
Ошибка в коде, не предусмотрена ситуация когда есть пробелы в значениях свойств события TLOCK
-----------------------------------------
Ошибка:
Невозможно пройти мастер на шаге настройки ТЖ в том случае, если используется более одного сервера в кластере.
Решение:
Нужно внести исправления в код, к сожалению решение у меня не сохранилось, но если у вас возникла такая ситуация, с помощью отладчика и здравого смысла вы довольно быстро найдете причину проблемы. Как только будет время, смоделирую ситуацию и добавлю сюда исправленный код.
-----------------------------------------
Ошибка:
При анализе возникает сообщение: Нет проблем с производительностью.
Хотя вы точно знаете что они есть, видите что в логах есть данные о медленных запросах и т.д.
Решение:
Один из вариантов решения описан в комменатрии (39) от Bad_Developer
Подробное решение проблемы есть там же в прикрепленном файле.
-----------------------------------------
Ошибка:
При анализе взаимоблокировок появляется ошибка “Ошибка при вызове метода контекста (РазделитьФайл)”.
Решение:
Установить пользователю, под которым запущен сервер 1С:Предприятие с ЦУП, полные права на локальную папку Temp, в которой разбираются результаты анализа.
Описание:
Как водится с ЦУПом - очередные заморочки с правами. Спасибо пользователю h00k за описание ошибки и решение.
-----------------------------------------
Ошибка:
При анализе появляется сообщение "Анализ проблем на выбранном участке не может быть выполнен..."
В мониторе анализе замеры отображаются с восклицательным знаком, ошибка "Ошибка при вызове конструктора (COMОбъект)"
Пока зафиксирована только для 8.3
Решение:
Т.к. сервер 1С - 64-битный, а comcntr.dll - 32, просто зарегистрировать ее через regsvr32 было недостаточно.
Т.е. на клиенте объект COMConnector создавался по той причине, что и клиент и компонента 32-битные.
В рамках фонового задания - объект создается уже вызовом сервера - а тут уже срабатывает следующая пакость - дело в том что на 64-ных ОС сделано разделение реестра, и в зависимости от разрядности вызывающего процесса он получает от ОС разные ветки регистрации - результат сервер не видит зарегистрированную 32-ю компоненту.
Решение проблемы весьма простое - опубликовать данную компоненту как COM+ приложение, т.е. через оснастку "Component Services"
Просто делаем там дополнительную ветку V83COMConnector - и прописываем внутрь нашу dll.
Единственный минус - при обновлении платформы нельзя забывать перепрописать dll из нового релиза, а то предположительно можно получить много сюрпризов.
Описание:
В процедуре ПолучитьComСоединительПриложения() не отрабатывает конструкция Новый COMОбъект(ПолучитьВерсиюCom() + ".COMConnector"), т.е. попытка создать COM-объект V83.COMConnector
Спасибо H1nt за описание ошибки и решения проблемы.
-----------------------------------------
Ошибка:
Происходит зависание при разборе данных о блокировках.
Решение:
Заменить функцию "РазделитьСтроку" в общем модуле "КипОбщий". Код новой функции приведен ниже
Функция РазделитьСтроку(ИсходнаяСтрока, Разделитель, ПустыеСтроки = Ложь) Экспорт
Результат = Новый Массив;
ИсходнаяСтрока2 = ИсходнаяСтрока;
Если ПустыеСтроки = Ложь Тогда
ПустыеСтроки = ?(Разделитель = " ", Истина, Ложь);
Если ПустаяСтрока(ИсходнаяСтрока2) Тогда
Если Разделитель = " " Тогда
Результат.Добавить("");
КонецЕсли;
Возврат Результат;
КонецЕсли;
КонецЕсли;
Позиция = Найти(ИсходнаяСтрока2, Разделитель);
Пока Позиция > 0 Цикл
Подстрока = Лев(ИсходнаяСтрока2, Позиция - 1);
Если Не ПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда
Подстрока = СокрЛП(Подстрока);
Результат.Добавить(Подстрока);
КонецЕсли;
ИсходнаяСтрока2 = Сред(ИсходнаяСтрока2, Позиция + СтрДлина(Разделитель));
Позиция = Найти(ИсходнаяСтрока2, Разделитель);
КонецЦикла;
Если Не ПустыеСтроки Или Не ПустаяСтрока(ИсходнаяСтрока2) Тогда
ИсходнаяСтрока2 = СокрЛП(ИсходнаяСтрока2);
Результат.Добавить(ИсходнаяСтрока2);
КонецЕсли;
Возврат Результат;
КонецФункции // РазделитьСтроку()
Описание:
В страрой функции использовался неоптимальный алгоритм разбора строки посимвольно, что при большом объеме обрабатываемых данных приводило к зависанию.
Спасибо wondkind за описание ошибки и решения проблемы.
-----------------------------------------
Ошибка:
В релизе 2.1.5.10 ошибка при анализе блокировок:
АнализБлокировок1С.Модуль(195)}: Индекс находится за границами массива
Решение:
Код:
-----------------------------------------
Можно ускорить разбор данных исправив неоптимальный запрос, как бы стрнно это не звучало :)
Необходимо в ОМ.Анализ в функции ВыгрузитьДанные, переписать запрос с использованием временной таблицы вместо подзапроса.
Ускорение будет весьма ощутимо, чем больше данных было собрано, тем сильнее будет эффект.
Так же прошу обратить внимание на содержательный комментарий (18) от пользователя serno
Там приводится пример ускорения еще одного запроса в ЦУП
Если у вас есть примеры других ошибок в ЦУП (но не по вине неправильной настройки) пишите в комментариях к статье, буду актуализировать.
P.S. Спасибо Саликову Алексею, за решение некоторых ошибок, описанных в этой статье.