При обновлении конфигурации 1С:Зарплата и управление персоналом на актуальные релизы системные администраторы и программисты нередко сталкиваются с ситуацией, когда регламентный процесс отложенного обновления данных выполняется неестественно долго — сутками или даже неделями. Одной из наиболее частых проблем является зависание или крайне медленная работа обработчика ПовторноОбработатьСообщения11000. Выясним причину такого поведения системы и разберем практические шаги по ускорению и корректному завершению обновления.
Анализ причин медленной работы обработчика
Проанализируем ситуацию: обработчик ПовторноОбработатьСообщения11000 отвечает за миграцию и актуализацию входящих сообщений социального электронного документооборота (СЭДО) с типом 11000. В прикладном решении этот тип сопоставлен документу УведомлениеОСтатусеВыплатыПособия. В крупных организациях количество таких документов в базе данных может достигать сотен тысяч штук.
При отладке процедуры можно заметить характерную картину: программный код не завис намертво, вызовы продолжаются, однако обработка каждого документа не приводит к изменению данных (изменения отсутствуют), и платформа переходит к следующему объекту. Затягивание времени выполнения обусловлено несколькими факторами:
Огромный объем данных: последовательное чтение сотен тысяч документов объектным методом даже без записи создает существенную нагрузку на сервер СУБД и процессор.
Особенности алгоритмов БСП: отложенные обработчики выбирают объекты порциями. Если выборка построена по критерию, который при холостом прогоне не модифицируется (документ не перезаписывается), либо если транзакция порции прерывается по тайм-ауту фонового задания, обработка может зацикливаться на одном и том же массиве объектов.
Фоновый приоритет выполнения: по умолчанию отложенное обновление работает в режиме разделения ресурсов («Приоритет работы пользователей»), когда между порциями данных система делает принудительные паузы, чтобы не снижать быстродействие для обычных пользователей.
Влияние расширений и подписок: если в конфигурации активны нетиповые расширения, перехватывающие события объектов (например, ПередЗаписью или ПриЧтенииСозданииНаСервере), накладные расходы на каждый документ возрастают многократно.
Шаг 1. Диагностика прогресса и выявление проблемных объектов
Прежде чем прерывать процесс, важно точно определить, на каких именно объектах остановилась процедура обновления, и движется ли счетчик. Разберем, как это сделать:
Подключимся к процессу через отладчик на сервере 1С и установим точку останова в теле процедуры обработчика (в модуле обновления соответствующей подсистемы зарплаты и СЭДО). Это позволит убедиться, считываются ли новые ссылки или цикл идет по одним и тем же идентификаторам.
Воспользуемся специализированными внешними отчетами и обработками для контроля отложенного обновления (например, обработкой подсчета числа невыполненных объектов БСП), чтобы оценить реальный остаток очереди.
Проверим технологический журнал и системный журнал регистрации на предмет регулярных аварийных завершений фоновых заданий (ошибки превышения памяти, ошибки блокировок СУБД или разрыва соединений). Если фоновое задание аварийно завершается, транзакция БСП откатывается, и прогресс порции не фиксируется.
Шаг 2. Настройка приоритета и включение многопоточности
Если в базе данных действительно накопилось 200 000 и более документов УведомлениеОСтатусеВыплатыПособия, выполнение в один поток в пользовательском режиме может занимать дни. Ускорим выполнение встроенными средствами библиотеки стандартных подсистем:
Перейдем в раздел Администрирование → Обслуживание → Результаты обновления и дополнительная обработка данных.
Посмотрим на настройку приоритета обновления: переключим тумблер с режима Приоритет работы пользователей на режим Приоритет обработки данных. Это уберет технологические паузы между пакетами данных.
Настроим параллельную обработку: увеличим число потоков обновления через константу КоличествоПотоковОбновленияИнформационнойБазы (или соответствующее поле настроек формы). Рекомендуется установить значение, равное количеству свободных процессорных ядер сервера 1С. Обратите внимание: многопоточное выполнение поддерживается только в клиент-серверном варианте базы данных.
Шаг 3. Установка актуальных исправлений (патчей) и переход на свежий релиз
Нередко некорректная выборка документов в обработчиках СЭДО связана с ошибками самого релиза конфигурации. Фирма «1С» оперативно выпускает исправления выявленных проблем отложенного обновления в виде патчей (расширений-исправлений):
Откроем раздел Администрирование → Обслуживание → Обновление программы → Установка обновлений и исправлений (патчей).
Убедимся, что загружены все доступные патчи для текущего релиза, особенно касающиеся подсистемы взаимодействия с СФР и СЭДО.
Если проблема возникла на промежуточном релизе конфигурации (например, на ранних сборках ветки 3.1.38), рассмотрим возможность прямого обновления на актуальный стабильный релиз (например, 3.1.38.92 или выше), где работа алгоритмов типа 11000 уже оптимизирована разработчиками.
Шаг 4. Монопольный запуск или принудительное завершение обработчика
Если отладка показала, что обработчик фактически ничего не изменяет в базе данных, а лишь бесконечно сканирует исторические документы, либо выполнение блокирует нормальную работу пользователей, применим ручные методы управления БСП:
В форме списка процедур обновления переведем обработчик ПовторноОбработатьСообщения11000 в ручной или монопольный режим, после чего запустим его принудительно во внерабочее время. Для прямого выполнения без планировщика заданий в клиентской сессии с полными правами можно выполнить:
ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОтложенноеОбновлениеСейчас();
Если данные документов УведомлениеОСтатусеВыплатыПособия уже находятся в актуальном состоянии и не требуют конвертации, разработчик может программно зафиксировать завершение обработки проблемных данных, вызвав служебный метод БСП:
При этом запись о статусе обработки обновится в служебных регистрах сведений БСП, что снимет блокировку и позволит базе данных завершить обновление конфигурации.
На время выполнения длительных процедур обязательно отключим нетиповые расширения конфигурации, чтобы предотвратить срабатывание дополнительных подписок на события при проверке документов.