Рассмотрим ситуацию, которая часто ставит в тупик даже опытных системных администраторов и разработчиков. Представим: вы разворачиваете копию базы 1С:Документооборот 2.1 или переносите рабочую базу на новый сервер. При запуске система выдает стандартный запрос: «Информационная база перемещена или является копией». Если вы выбираете вариант «Это копия», всё работает прекрасно. Но стоит выбрать «База перемещена» (что необходимо для полноценной работы регламентных заданий и внешних интеграций), как система перестает пускать пользователей, а сервер начинает бесконечно крутить фоновые задания, создавая критические блокировки на уровне MS SQL Server.
В этой статье мы подробно разберем, почему это происходит, как связаны «Система взаимодействия» и зависшие транзакции со статусом AWAITING COMMAND, и какими методами можно вернуть базу в строй.
Проанализируем механику процесса. Когда мы нажимаем кнопку «База перемещена», платформа 1С инициирует ряд процедур по перерегистрации информационной базы. В 1С:Документооборот одной из самых «тяжелых» подсистем в этот момент является Система взаимодействия (обсуждения). Она пытается синхронизировать локальные данные с сервером взаимодействия.
Проблема часто кроется в сочетании конкретной версии платформы (например, 8.3.20.2184) и накопленных данных в очереди обсуждений. В журнале регистрации можно заметить бесконечные записи о выполнении фонового задания, которое обращается к регистру сведений Очередь обновления обсуждений. На уровне SQL-сервера это выглядит как незавершенная транзакция в статусе sleeping / AWAITING COMMAND. Это означает, что процесс 1С открыл транзакцию в базе данных, отправил запрос, но из-за внутреннего бага или ожидания ответа от внешнего сервиса (сервера обсуждений) «завис» и не закрыл транзакцию. В итоге системные таблицы блокируются, и новые пользователи не могут даже пройти аутентификацию (в логах это отображается как «Ошибка аутентификации с пустым пользователем»).
Если обычное удаление сеансов через консоль администрирования не помогает, и процессы мгновенно порождают новые фоновые задания, применим метод «мягкой перезагрузки» рабочих процессов. Разберем этот алгоритм:
300 секунд (5 минут). Это заставит систему пометить старые процессы как неактивные и постепенно перенести сеансы на новые.30 секунд. Это критически важно: так мы заставим операционную систему принудительно убить «зомби-процессы», которые держат транзакции в SQL.0).Поскольку виновником зацикливания является регистр Очередь обновления обсуждений, нам необходимо очистить его, чтобы фоновые задания перестали «спотыкаться» об одни и те же записи. Выполним следующие действия:
Зайдем в базу в режиме «Это копия» (в этом режиме система взаимодействия блокируется автоматически). Теперь нам нужно программно очистить регистр. Воспользуемся обработкой «Групповое изменение реквизитов» или напишем простой код:
Набор = РегистрыСведений.ОчередьОбновленияОбсуждений.СоздатьНаборЗаписей();
Набор.Записать(); // Записываем пустой набор, тем самым очищая регистр
Также рекомендуется временно полностью отключить систему взаимодействия, чтобы проверить стабильность системы без внешних вызовов. Это можно сделать через Функции для технического специалиста или программно:
Если СистемаВзаимодействия.Поддерживается() Тогда
СистемаВзаимодействия.Отключить();
КонецЕсли;
Иногда очистки регистра недостаточно, так как информация о «битом» сеансе может застрять в серверном кэше или системных таблицах метаданных. Рассмотрим дополнительные меры:
1C:Enterprise 8.3 Server Agent. Перейдите в папку srvinfo (обычно в C:\Program Files\1cv8\srvinfo) и удалите содержимое папок reg_1541 (кроме файлов конфигурации самого кластера).ConfigSave. Проверьте её состояние и убедитесь, что в ней нет «застрявших» конфигураций, которые не были приняты.Как показывает практика эксплуатации версии 8.3.20.2184, она имеет внутренние несовершенства в механизме управления блокировками при работе с внешними компонентами. Если вышеописанные шаги помогают лишь временно, и проблема повторяется каждые несколько дней, проанализируем возможность перехода на более стабильную сборку.
Специалисты рекомендуют переходить на релизы ветки 8.3.21 или 8.3.22, где работа с сеансами и их принудительным завершением была существенно переработана. Если вы привязаны к ветке 8.3.20, попробуйте обновиться до последних патчей этой версии (например, 8.3.20.2257 и выше), где исправлены ошибки утечки памяти в фоновых заданиях.
Подведем итог. Если ваш 1С:Документооборот «уходит в себя» после подтверждения перемещения базы:
РегистрСведений.ОчередьОбновленияОбсуждений.Помните, что статус AWAITING COMMAND в SQL при наличии открытой транзакции — это всегда сигнал о том, что приложению (1С) не хватило логики для корректного выхода из операции. Тщательный мониторинг регистра обсуждений поможет вам избежать подобных «магических» проблем в будущем.