При больших объемах документооборота (десятки тысяч документов в месяц) процедура группового перепроведения или закрытия периода в 1С может занимать от 10 до 20 часов. Если бухгалтерия регулярно вносит правки задним числом и повторно проводит месяцы, производительность системы становится критическим фактором. Рассмотрим комплекс мер, направленных на оптимизацию оборудования, настроек СУБД и программных механизмов платформы 1С:Предприятие.
Оптимизация архитектуры и протоколов взаимодействия
Разберем конфигурацию размещения серверных компонентов. Распространенной ошибкой является разделение сервера 1С:Предприятия и СУБД MS SQL Server на две отдельные физические машины при небольшом количестве пользователей:
Использование протокола Shared Memory: Размещение кластера серверов 1С и экземпляра MS SQL Server на одном физическом сервере позволяет использовать межпроцессный обмен через оперативную память (протокол Shared Memory) вместо сетевого протокола TCP/IP. Это устраняет сетевые задержки (Latency) при передаче сотен тысяч мелких запросов, которые генерируются при проведении каждого документа.
Настройка дисковой подсистемы: Базы данных, журнал транзакций (LDF) и системная база tempdb должны располагаться на раздельных высокоскоростных накопителях SSD/NVMe. Это исключает конкуренцию дисковых очередей на запись при интенсивном формировании проводок.
Тонкая настройка MS SQL Server и операционной системы
Проанализируем параметры СУБД и Windows, влияющие на скорость выполнения транзакций 1С:
План электропитания: В операционной системе необходимо активировать схему «Высокая производительность» (High Performance). В BIOS/UEFI сервера рекомендуется отключить энергосберегающие состояния ядер (C-States, SpeedStep), чтобы процессор работал на максимальной частоте без падений в режим энергосбережения. Для 1С критична скорость одного процессорного ядра (Single-thread performance).
Параметр MAXDOP: Для экземпляра MS SQL Server параметр Max Degree of Parallelism (MAXDOP) необходимо установить в значение 1. Платформа 1С формирует запросы, не рассчитанные на автоматическое распараллеливание средствами СУБД, что при ненулевом значении приводит к избыточным накладным расходам и взаимным блокировкам (CXPACKET).
Конфигурация базы tempdb: Создадим несколько файлов данных для tempdb одинакового размера с фиксированным шагом автоувеличения (по числу логических ядер процессора, но обычно не более 8). Это устраняет конкуренцию за системные страницы распределения памяти (PFS/GAM/SGAM). Для SQL Server 2008 R2 также рекомендуется включить флаг трассировки T1118.
Мгновенная инициализация файлов: Предоставим учетной записи службы SQL Server право локальной политики безопасности SE_MANAGE_VOLUME_NAME («Выполнение задач по обслуживанию томов»). Это исключит задержки на зануление дискового пространства при расширении файлов базы данных.
Обслуживание статистик перед проведением: Обязательно выполним регламентное обновление статистик с полным сканированием:
UPDATE STATISTICS ИмяБазы.dbo._AccRgED WITH FULLSCAN;
UPDATE STATISTICS ИмяБазы.dbo._AccRgOpt WITH FULLSCAN;
Актуальная статистика гарантирует построение эффективных планов выполнения запросов оптимизатором SQL.
Особенности регистров бухгалтерии и параллельного проведения
Выясним причину, почему параллельное проведение в типовой «Бухгалтерии предприятия» (особенно редакции 2.0) работает не так эффективно, как в торговых или производственных конфигурациях:
Режим блокировок: Конфигурация «Бухгалтерия предприятия 2.0» по умолчанию работает в автоматическом режиме блокировок. При запуске нескольких параллельных фоновых потоков проведения документов неизбежно возникают взаимоблокировки (Deadlocks) на уровне таблиц MS SQL Server из-за эскалации блокировок диапазонов.
Таблицы итогов регистра бухгалтерии: В отличие от независимых регистров накопления, все проводки по счетам обновляют агрегатные таблицы итогов регистра бухгалтерии (таблицы остатков и оборотов). Одновременная запись движений по одним и тем же счетам (например, 41, 60, 62) разными потоками блокирует доступ к общим строкам итогов.
Последовательности документов: Стандартный механизм контроля последовательностей («Партионный учет», «Взаиморасчеты») фиксирует монопольную границу. Любой документ пытается сдвинуть общую границу последовательности, блокируя остальные сеансы.
Программные способы ускорения проведения
Посмотрим на практические приемы снижения нагрузки на СУБД во время массовых операций:
Временное отключение итогов регистров: При массовом проведении через внешнюю обработку можно программно отключить пересчет итогов регистров бухгалтерии и накопления перед стартом, а после завершения провести однократный пересчет. Это многократно сокращает количество дисковых операций записи.
// Отключение пересчета итогов регистра бухгалтерии
РегистрыБухгалтерии.Хозрасчетный.УстановитьИспользованиеИтогов(Ложь);
// Выполнение алгоритма проведения документов массива
Для Каждого ДокСсылка Из МассивДокументов Цикл
ДокОбъект = ДокСсылка.ПолучитьОбъект();
ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
КонецЦикла;
// Включение и однократный пересчет итогов
РегистрыБухгалтерии.Хозрасчетный.УстановитьИспользованиеИтогов(Истина);
РегистрыБухгалтерии.Хозрасчетный.ПересчитатьИтоги();
Управление периодом рассчитанных итогов: Проверим дату, по которую рассчитаны итоги в базе данных (через стандартную обработку Управление итогами). Если итоги рассчитаны с большим запасом в будущее или, наоборот, отстают от рабочего периода, сервер тратит лишнее время на вычисление виртуальных остатков «на лету».
Пакетная обработка в транзакциях: При программном перепроведении объединим проведение документов в пачки по 50–100 штук в одной явной транзакции НачатьТранзакцию() ... ЗафиксироватьТранзакцию(), что снизит накладные расходы на обращение к журналу транзакций.
Организационные и методологические меры
Если технический предел оборудования и настроек исчерпан, оптимизация переходит в плоскость регламентов учета:
Установка даты запрета изменения данных: Внедрение жесткого регламента закрытия периода с установкой даты запрета редактирования для пользователей исключает необходимость постоянного перепроведения прошлых месяцев.
Метод оценки МПЗ: Применение способа оценки стоимости запасов «По средней» вместо ФИФО исключает сложный партионный учет, что в разы ускоряет проведение документов поступления и реализации.
Свертка информационной базы: Обрезка исторических данных за старые периоды уменьшает физический объем таблиц проводок и итогов, снижая время выборки данных.
Переход на актуальные редакции: Перевод учета на конфигурацию «Бухгалтерия предприятия 3.0», использующую управляемый режим блокировок и оптимизированные структуры платформы 1С 8.3, позволяет полноценно применять параллельные механизмы обработки данных.