Многие администраторы и разработчики сталкиваются с ситуацией: после проведения нединамического обновления конфигурации (особенно это касается тяжелых решений вроде 1С:ERP Управление предприятием) пользователи начинают массово жаловаться на «тормоза». Система, которая еще вчера работала стабильно, начинает долго открывать формы, медленно проводить документы и зависать на простых отчетах. Проанализируем ситуацию, выясним причины этого поведения и разберем по шагам, как привести систему в чувство.
Разберем, что происходит внутри кластера 1С при обновлении. Конфигурация в базе данных хранится в виде упакованных блоков (BLOB). При запуске после обновления сервер 1С вынужден заново считывать метаданные из таблицы Config, распаковывать их и загружать в оперативную память процесса rphost.
Пока этот «скелет» системы не будет полностью десериализован и размещен в памяти, каждое обращение пользователя к новому объекту будет вызывать задержку. В случае с ERP, где количество объектов исчисляется тысячами, процесс первичного наполнения кэша может занимать значительное время. Именно поэтому «убийство» процесса rphost иногда помогает временно очистить «зависшие» данные, но заставляет систему проходить цикл наполнения кэша заново.
Когда мы выполняем обновление, которое меняет структуру таблиц (добавление реквизитов, изменение типов), SQL Server часто сбрасывает кэш планов выполнения запросов (Query Plan Cache). Рассмотрим подробнее:
Index Scan вместо Index Seek), что приведет к «туплению» на ровном месте.В современных конфигурациях основная часть работы по обновлению происходит не в Конфигураторе, а в пользовательском режиме. После первого запуска системы под администратором включаются механизмы Библиотеки стандартных подсистем (БСП).
Выполняются так называемые отложенные обработчики обновления. Это фоновые задания, которые реструктуризируют данные в регистрах, заполняют новые константы или пересчитывают остатки. Пока эти задания активны, они потребляют ресурсы дисковой подсистемы и процессора, конкурируя с обычными пользователями. В крупных базах ERP эти процессы могут длиться часами.
Сразу после завершения обновления в Конфигураторе, до того как пускать в базу основной поток пользователей, необходимо выполнить «гигиенические» процедуры на уровне СУБД. Проанализируем пример скрипта для MS SQL Server, который поможет актуализировать статистику и очистить процедурный кэш:
-- Обновление статистики для всей базы данных
EXEC sp_updatestats;
-- Очистка кэша планов запросов (выполнять с осторожностью на продуктивных серверах)
DBCC FREEPROCCACHE;
Важный момент: Обновление статистики (UPDATE STATISTICS) позволяет SQL-серверу «увидеть» реальное распределение данных в новых и измененных таблицах, что критически важно для производительности ERP.
Чтобы пользователи не страдали от первичной компиляции кода и загрузки форм, мы можем «прогреть» систему. Рассмотрим, как это сделать эффективно:
Для Каждого СправочникИзМетаданных Из Метаданные.Справочники Цикл
Состояние("Прогрев: " + СправочникИзМетаданных.Имя);
Попытка
Менеджер = Справочники[СправочникИзМетаданных.Имя];
Выборка = Менеджер.Выбрать();
// Просто считываем первый элемент для инициализации кэша
Если Выборка.Следующий() Тогда
Объект = Выборка.Ссылка.ПолучитьОбъект();
КонецЕсли;
Исключение
Продолжить;
КонецПопытки;
КонецЦикла;
Не пускайте процесс обновления БСП на самотек. Перейдите в раздел Обслуживание — Результаты обновления программы. Здесь мы можем проанализировать список отложенных обработчиков.
Рекомендация: Если работа критически важна, можно временно увеличить приоритет или количество потоков для этих заданий, чтобы они завершились быстрее. Однако помните, что это создаст дополнительную нагрузку на сервер. Оптимально дождаться завершения приоритетных заданий до массового входа сотрудников.
Как показывает практика, одновременный вход 100+ сотрудников сразу после снятия блокировки создает «шторм» запросов к пустому кэшу. Рассмотрим стратегию очередности:
rphost постепенно наполнять кэш без резких скачков нагрузки, приводящих к зависанию рабочих процессов.Выясним главную истину: 1С:ERP — это крайне сложная система с огромным объемом связей. Обновление в середине рабочего дня всегда будет сопряжено с рисками падения производительности. Чтобы минимизировать негатив, выполним следующие шаги: обновим статистику SQL, дождемся выполнения критических фоновых заданий БСП и выполним «прогрев» системы перед запуском пользователей. Это позволит избежать большинства жалоб на то, что «1С тупит».