8 окт. 2017 г.

База с паранормальными явлениями


На днях дали базу 1С:ERP на анализ. Симптомы - все тормозит. Открытие конфигуратора (примерно 1,5 часа), клиента, переходы по навигационным ссылкам - все. Остальные базы в кластере работают нормально, в том числе и другая ERP, а с этой непонятная беда. Чистка кэша, тестирование/исправление, DBCC CHECKDB, разворачивание из SQL бэкапа в чистую базу, выгрузка/загрузка .dt, пересоздание базы в кластере, какие-то еще шаманства - ничего не помогает.

Ок, развернул базу, решил посмотреть в SQL Profiler, какие запросы выполняются при запуске базы. Внимание привлекло следующее поведение. После каждого служебного запроса к таблице Config

exec sp_executesql N'SELECT Creation,Modified,Attributes,DataSize,BinaryData FROM Config WHERE FileName = @P1 ORDER BY PartNo',N'@P1 nvarchar(128)',N'086d69d6-e2fa-45cb-84b6-f8f3e2919160'

дополнительно выполняется

exec sp_executesql N'SELECT FileName,Creation,Modified,Attributes,DataSize FROM Config WHERE PartNo = 0 and FileName LIKE @P1',N'@P1 nvarchar(128)',N'_____________________________________dynupdate_%'

Проверка на нормально работающей базе показала отсутствие запросов с таким параметром. То есть можно предположить, что процесс динамического обновления конфигурации некорректно отработал и где-то в базе записана информация, наличие которой приводит к появлению этих дополнительных запросов. Ближе к началу трассировки были обнаружены следующие строки, из контекста которых можно предположить,что они как-то связаны с динамическим обновлением:

exec sp_executesql N'SELECT Creation,Modified,Attributes,DataSize,BinaryData FROM Params WHERE FileName = @P1 ORDER BY PartNo',N'@P1 nvarchar(128)',N'DynamicallyUpdated'

exec sp_executesql N'SELECT FileName,Creation,Modified,Attributes,DataSize FROM Config WHERE PartNo = 0 and FileName = @P1',N'@P1 nvarchar(128)',N'DynamicallyUpdated'

Выполнение этих запросов в эталонной базе показало отсутствие подходящих записей, в проблемной базе было выявлено наличие данных.

Select * FROM Config WHERE FileName like 'DynamicallyUpdated';
Select * FROM Params WHERE FileName like 'DynamicallyUpdated';



Далее  в проблемной базе было выполнен скрипт:

Delete FROM Config WHERE FileName like 'DynamicallyUpdated';
Delete FROM Params WHERE FileName like 'DynamicallyUpdated';


После чего тормоза пропали, клиент и конфигуратор стали нормально запускаться. Вот так сеанс экзорцизма превратился в решение технической проблемы.


По результатам поиска по "1c DynamicallyUpdated" было найдено несколько статей, например "Динамическое обновление. Отказ работы механизма сравнения/объединения файлов конфигурации", рекомендую к ознакомлению.

5 комментариев: