Каждый системный администратор и разработчик 1С рано или поздно сталкивается с нестандартными проблемами производительности систем. Представим ситуацию: в определенный момент в нескольких базах одновременно начинают лавинообразно расти блокировки. Пользователи жалуются на невозможность проведения документов, причем под одним пользователем документ проводится, а под другим — зависает. Перезапуск службы сервера 1С временно решает проблему, но через некоторое время всё повторяется. Самое странное — консоль администрирования 1С и СУБД MS SQL показывают полное отсутствие классических транзакционных блокировок таблиц. При этом в журнале регистрации номера транзакций «застывают» на одном месте или вовсе отображаются пустыми.
В этой статье мы подробно проанализируем, почему возникает эта критическая ситуация, как она связана с журналом регистрации 1С и как по шагам восстановить стабильную работу системы.
Для начала разберем архитектуру работы платформы 1С:Предприятие. Запись любого важного события (проведение документа, изменение справочника, вход пользователя) сопровождается фиксацией этого действия в журнале регистрации. В старом формате (который используется по умолчанию во многих базах и имеет расширение .lgp) ЖР представляет собой набор текстовых и бинарных файлов на диске сервера приложений.
Запись в ЖР происходит синхронно непосредственно внутри транзакции СУБД. Процесс выглядит следующим образом:
rphost.exe) пытается записать событие транзакции в индексный файл лога 1Cv8.lgf или текущий файл .lgp.Если на этапе записи в файл ЖР рабочий процесс 1С сталкивается с системной блокировкой файла (например, его занял антивирус или жесткий диск перегружен), поток записи намертво зависает. При этом транзакция в MS SQL остается открытой. С точки зрения СУБД, никаких конфликтов блокировок нет — транзакция просто ожидает команды от сервера приложений. Однако на уровне платформы 1С сервер продолжает удерживать управляемые блокировки на изменяемые объекты. Новые пользователи, пытающиеся провести аналогичные документы, выстраиваются в бесконечную очередь ожидания, которая в итоге завершается ошибкой таймаута.
Рассмотрим подробнее факторы, которые провоцируют появление этой проблемы:
1Cv8.lgf и *.lgp. Захватив файл монопольно на доли секунды, антивирус парализует работу рабочего процесса rphost.exe.1Cv8.lgf содержит индексную структуру логов. При аварийном завершении работы сервера или нехватке места на диске этот файл может повредиться. Любая последующая попытка записи приводит к зацикливанию и зависанию потока.rphost.exe, зависание потока ЖР в одной базе мгновенно парализует транзакции во всех остальных базах этого процесса.Если блокировки уже начались, а пользователи не могут работать, выполним оперативную диагностику без полной перезагрузки всего физического сервера. Откроем консоль администрирования 1С и проанализируем состояние рабочих процессов:
rphost.exe.Чтобы предотвратить повторение проблемы, в обязательном порядке настроим политики безопасности установленного на сервере антивируса. Нам необходимо добавить в список исключений (проверок в реальном времени) следующие объекты:
ragent.exe, rmngr.exe, rphost.exe.srvinfo, обычно расположенный по пути C:\Program Files\1cv8\srvinfo\).*.lgf, *.lgp, *.lgd.Если индексный файл ЖР поврежден, его необходимо пересоздать. Рассмотрим пошаговый алгоритм очистки и архивирования логов:
net stop "1C:Enterprise 8.2 Server Agent"
Или для версии 8.3:
net stop "1C:Enterprise 8.3 Server Agent"
C:\Program Files\1cv8\srvinfo\reg_1541\<Идентификатор_Базы>\1Cv8Log\.1Cv8Log в архивную директорию на другом диске.1Cv8Log. Внутри нее создадим пустой текстовый файл и переименуем его в 1Cv8.lgf (убедитесь, что расширение файла изменилось с .txt на .lgf).
net start "1C:Enterprise 8.3 Server Agent"
Чтобы сбой в ЖР одной базы не приводил к остановке работы других систем, настроим изоляцию баз в консоли кластера 1С. Для этого:
rphost.exe (параметр «Количество баз на один процесс» в настройках кластера).Если анализ производительности показывает высокую очередь к диску, где установлена служба 1С, настоятельно рекомендуется перенести рабочий каталог сервера (параметр -d в параметрах запуска службы ragent) на производительный SSD-накопитель. Это кардинально ускорит операции чтения и записи логов, минимизируя вероятность образования очередей блокировок.
Применяя эти комплексные меры, мы надежно защитим сервер 1С от внезапных зависаний транзакций и обеспечим стабильную и бесперебойную работу всех пользователей.