В практике администрирования и разработки на платформе 1С встречается редкая и на первый взгляд необъяснимая ситуация: документы (например, ПеремещениеТоваров) перестают проводиться в обычном клиент-серверном режиме, вызывая «зависание» интерфейса. При этом в файловом варианте или — что самое удивительное — при запуске той же серверной базы из конфигуратора в режиме отладки (через «Начать отладку») всё работает корректно. Рассмотрим причины такого поведения и разберем по шагам, как локализовать и устранить эту проблему.
Когда мы сталкиваемся с тем, что в режиме отладки документ «проскакивает», а в обычном — виснет, мы имеем дело не с ошибкой в коде, а с особенностями работы менеджера блокировок и СУБД. Разберем, почему это происходит:
Как показывает практика, если ваша информационная база является узлом распределенной информационной базы (РИБ), корень проблемы часто кроется в таблицах регистрации изменений. При проведении документа система пытается записать данные в эти таблицы для последующей передачи в другие узлы.
Если в подчиненном узле накопилось критическое количество изменений или произошел логический сбой в регистрах миграции данных, транзакция записи может «подвиснуть» именно в момент фиксации изменений. Выполним следующие действия для исправления:
В рассматриваемом случае именно выполнение обмена данными с главным узлом полностью устранило проблему зависания документов в подчиненной базе.
Если обмен РИБ не помог, проанализируем ситуацию на уровне СУБД. Зависание без выдачи ошибки («бесконечные песочные часы») — классический признак эскалации блокировок. Проанализируем, что происходит внутри SQL:
Для решения рекомендуется выполнить регламентные операции на уровне SQL-сервера:
-- Обновление статистики для более точного построения планов запросов
UPDATE STATISTICS [Имя_Таблицы];
-- Очистка процедурного кэша (использовать с осторожностью на рабочих базах)
DBCC FREEPROCCACHE;
Еще одной неочевидной причиной зависания является работа службы Полнотекстового поиска (ППС). При записи любого объекта платформа пытается обновить индекс. Если индекс поврежден, поток проведения будет ожидать ответа от службы индексации неоправданно долго.
Попробуем выполнить следующие шаги:
1С:Предприятие или через Типовые регламентные операции.Если стандартные методы не помогают, проанализируем проблему с помощью Технологического журнала (ТЖ). Нам интересны события TLOCK (управляемые блокировки) и TTIMEOUT (превышение времени ожидания). Рассмотрим пример настройки файла logcfg.xml для поиска виновника зависания:
<config xmlns="http://v8.1c.ru/7.4/config/log">
<log location="C:\LOGS\LOCKS" history="2">
<event>
<eq property="Name" value="TLOCK"/>
</event>
<event>
<eq property="Name" value="TTIMEOUT"/>
</event>
</log>
</config>
Анализ логов позволит точно определить, на каком именно регистре накопления (например, ЗапасыИПотребности или ТоварыНаСкладах) происходит остановка и какое другое соединение удерживает блокировку. Часто виновником оказывается «спящий» сеанс, который завис в терминальной сессии и продолжает удерживать объектные блокировки на сервере приложений 1С.
Подводя итог, если документы проводятся только под отладкой, выполните последовательно:
1C:Enterprise Server Administration.Эти действия в 90% случаев позволяют восстановить работоспособность системы без внесения изменений в программный код документа.