Длительное выполнение процедуры закрытия месяца и расчета себестоимости в 1С:ERP Управление предприятием — одна из наиболее частых проблем на производственных предприятиях. Ситуация, когда на относительно небольшом массиве документов (порядка 8–10 тысяч документов в месяц) регламентная процедура закрытия длится 6–7 часов, не является нормальной. В большинстве случаев основное время занимает этап «Формирование движений по партиям и расчет себестоимости», а также последующее отражение документов в регламентированном учете.
Разберем по шагам, как локализовать узкие места, устранить учетные коллизии, правильно настроить регламентные задания и оптимизировать параметры платформы и СУБД.
Прежде чем приступать к оптимизации оборудования или переписыванию процедур, выясним, на каком конкретно этапе система зависает. Для этого проанализируем записи журнала регистрации:
Расчет партий и себестоимости.Протокол расчета.В большинстве производственных баз первопричина многочасового расчета кроется в методических ошибках ведения учета. Алгоритмы распределения партий работают итеративно, и при наличии коллизий число итераций лавинообразно растет:
Типичная ошибка регламента работы — запускать формирование партий исключительно в конце месяца. При таком подходе система вынуждена за один сеанс обрабатывать миллионы записей движений за все 30 дней.
Для решения этой проблемы настроим фоновое выполнение процедур:
Формирование движений по партиям и себестоимости.Если система работает на устаревших релизах линейки 2.1 (например, 2.1.3), в ней задействован старый механизм партионного учета, выполнявший большое количество последовательных запросов и блокировок таблиц. Начиная с версии 2.2, в конфигурацию внедрен механизм «Партионный учет 2.2».
Новая архитектура использует векторные алгоритмы расчета затрат и графы переделов, что исключает избыточные пересчеты и позволяет задействовать многопоточное закрытие месяца. Обновление конфигурации до актуальных версий дает кратный прирост производительности на этапе закрытия месяца.
Процедура закрытия месяца создает интенсивную нагрузку на дисковую подсистему и центральный процессор. Выполним ключевые технические настройки:
rphost выполняет значительную часть вычислительных алгоритмов в один поток. Сервер с меньшим числом ядер, но с высокой базовой частотой (от 3.5–4.0 ГГц) справляется с закрытием месяца в 1С значительно быстрее многоядерных процессоров с низкой частотой (2.0–2.2 ГГц).tempdb на быстрых NVMe/SSD-дисках.tempdb на несколько файлов данных одинакового размера (по числу физических ядер, обычно 4–8 файлов).-T1117 (равномерный рост файлов) и -T1118 (выделение страниц полными экстентами для снижения блокировок SGAM/PFS).Cost Threshold for Parallelism необходимо поднять со стандартного значения 5 до 30–50, чтобы СУБД не тратила ресурсы на распараллеливание простых подзапросов, а значение Max Degree of Parallelism (MAXDOP) ограничить количеством ядер в рамках одного NUMA-узла (обычно от 2 до 6).-T9481 (или включение режима устаревшей оценки кардинальности для базы) помогает стабилизировать скорость выполнения сложных запросов закрытия месяца.