При работе с крупными информационными базами «1С:Документооборот» системные администраторы и разработчики часто сталкиваются с ситуацией, когда в консоли кластера серверов наблюдается странная активность: фоновое задание выполняется длительное время (20–30 минут и более), порождает сотни отмененных транзакций и лишь единичные успешные фиксации. При этом пользователи начинают жаловаться на «зависание» системы и конфликты блокировок. Разберем детально, что это за процессы, почему они так себя ведут и как нормализовать работу системы.
Проанализируем наиболее вероятную причину — фоновое обновление дескрипторов доступа. В «1С:Документооборот» (особенно версии 2.1 и 3.0) реализована сложная иерархическая модель прав. Вместо того чтобы вычислять права «на лету» при каждом запросе (что крайне медленно), система использует механизм дескрипторов. Дескриптор — это специальный объект, в котором заранее рассчитаны права группы пользователей на конкретный документ или папку.
Рассмотрим, почему это вызывает массу отмененных транзакций. Когда в системе происходит масштабное событие (например, изменение прав у папки с тысячами документов, перенос сотрудника в другое подразделение или изменение делегирования прав), система запускает регламентное задание РегламентноеЗадание.РасчетПравДоступа. Процесс работает следующим образом:
_AccessRightsAssignments).В консоли мы видим «кучу отмененных транзакций», потому что фоновый процесс постоянно «стучится» в заблокированные записи, откатывается и пробует снова, пока не найдет свободное «окно» для записи. Выясним причину такой активности: обычно это связано с массовым пересчетом прав в 23:00, когда запускаются другие регламентные процедуры, или сразу после синхронизации данных.
Выясним, не связано ли поведение системы с очисткой данных. В современных версиях «1С:Документооборот» на базе БСП (Библиотеки стандартных подсистем) механизм удаления помеченных объектов может работать в фоне по расписанию. Рассмотрим по шагам, почему это приводит к блокировкам:
Если вы видите активность в районе 23:00, обязательно проверьте настройки расписания задания УдалениеПомеченныхОбъектов. Для исправления ситуации рекомендуется переводить удаление в режим «Одной транзакцией» только в периоды полного отсутствия пользователей, либо использовать выборочное удаление небольшими порциями.
Проанализируем ситуацию с индексацией. Задание ОбновлениеИндексаППД или СлияниеИндексов в «1С:Документооборот» обрабатывает не только метаданные, но и содержимое тяжелых файлов (PDF, сканы, Word). Рассмотрим технические детали:
При выполнении слияния индексов система блокирует таблицы полнотекстового поиска. Если база большая, процесс может занимать десятки минут. Если в это время фоновое задание сталкивается с нехваткой оперативной памяти на сервере или конфликтом доступа к файловому хранилищу, транзакция по обновлению индекса прерывается. Посмотрим на результат в консоли: мы увидим длительно висящий сеанс, который периодически «сбрасывает» транзакции.
Если «1С:Документооборот» интегрирован с ERP, УПП или ЗУП, важным фактором является синхронизация данных. Разберем цепочку событий:
Для того чтобы не гадать, а точно знать, что происходит, выполним следующие действия:
1. Использование Журнала регистрации. Настройте фильтр по номеру сеанса, который вы видите в консоли кластера. Обратите внимание на события Транзакция.Начало и Транзакция.Отмена. В тексте события часто содержится причина отмены, например: Конфликт блокировок при выполнении транзакции.
2. Настройка Технологического журнала (ТЖ). Это самый надежный способ. Разберем пример конфигурационного файла logcfg.xml для отслеживания длительных блокировок:
<config xmlns="http://v8.1c.ru/7.4/get/logcfg">
<log location="C:\LOGS\LOCKS" history="24">
<event>
<eq property="Name" value="TLOCK"/>
<gt property="Duration" value="5000000"/>
</event>
<event>
<eq property="Name" value="TTIMEOUT"/>
</event>
</log>
</config>
Этот конфиг позволит нам увидеть все блокировки (TLOCK), длительность которых превышает 5 секунд, и таймауты (TTIMEOUT), что поможет сопоставить номер сеанса с конкретной таблицей БД.
3. Проверка регламентных заданий. Перейдем в раздел Администрирование — Обслуживание — Регламентные и фоновые задания. Посмотрим на список выполненных заданий и найдем те, время завершения которых совпадает с периодом аномальной активности. Особое внимание уделим заданию Расчет прав доступа.
4. Анализ на уровне SQL. Если используется MS SQL Server, воспользуемся SQL Server Profiler или Extended Events. Проанализируем запросы от сеанса 1С. Если мы видим массовые команды ROLLBACK TRANSACTION, направленные к таблицам, начинающимся на _AccessRights, значит, мы имеем дело с проблемой дескрипторов прав.
Если подтвердится, что виноват расчет прав, рассмотрим следующие меры:
Таким образом, наличие множества отмененных транзакций в фоновом задании «1С:Документооборот» — это не ошибка программы как таковая, а следствие работы механизма оптимизации доступа (дескрипторов) или целостности связей при удалении в условиях конкуренции за ресурсы. Системный подход к анализу через ТЖ и консоль заданий позволит быстро локализовать «виновника» и настроить расписание так, чтобы система оставалась отзывчивой для пользователей.