Ситуация, когда время закрытия месяца в 1С:ERP 2.4 резко увеличивается с приемлемых 12 часов до катастрофических 60 и более, часто ставит в тупик даже опытных специалистов. Основной удар обычно приходится на этап ПодготовкаДанныхДляУчетаНДСиУСН2_4 или расчет себестоимости. Разберем детально, как проанализировать протоколы расчета, найти «узкие места» в данных и оптимизировать работу системы.
Для начала проанализируем технический журнал этапа партионного учета. Если мы видим показатели, подобные приведенным в обсуждении, это прямой сигнал о проблемах в структуре данных:
Рассмотрим ситуацию, когда почти все узлы (например, 1.9 млн из 1.9 млн) попадают в один огромный подграф. В норме 1С:ERP должна разбивать расчет на множество мелких независимых цепочек (подграфов), которые рассчитываются параллельно в несколько потоков.
Если же все документы месяца связались в один «ком», расчет фактически идет в один поток. Любая ошибка или «тяжелый» документ в этой цепочке тормозит весь массив данных. Чаще всего это происходит из-за использования общих ресурсов: например, одна и та же номенклатурная позиция, которая проходит через все документы производства и перемещения, или один склад, через который «прогоняется» абсолютно всё движение компании.
Проанализируем этап формирования временных таблиц. Если ВТПлановыеЦены формируется несколько часов (в нашем примере — почти 6 часов), это явная аномалия. Выясним причины:
ЦеныНоменклатуры миллионы, и SQL-сервер не может эффективно построить срез последних.Иногда причиной «схлопывания» всех расчетов в один гигантский граф является наличие некорректных записей в регистрах. Выясним, как их найти. В сообщении упоминается запись с пустым полем Документ в регистре ДетализацияПартийТоваровДляНДСиУСН2_4.
Пустое поле «Документ-регистратор» или «Документ-источник» заставляет систему считать, что эта запись относится ко всем операциям сразу. Это связывает все независимые цепочки в один мега-граф. Проанализируем регистры с помощью консоли запросов:
ВЫБРАТЬ
*
ИЗ
РегистрНакопления.ДетализацияПартийТоваровДляНДСиУСН2_4 КАК Детализация
ГДЕ
Детализация.Период МЕЖДУ &НачалоПериода И &КонецПериода
И Детализация.Регистратор ЕСТЬ NULL
Также стоит проверить регистр АналитикаУчетаНоменклатуры на наличие дублей или пустых значений. Если одна и та же номенклатура на одном складе имеет разные ключи аналитики, это создает избыточные связи, которые перегружают алгоритм распределения.
При огромных объемах данных (сотни миллионов движений) стандартные настройки могут не справляться. Рассмотрим шаги по технической настройке:
TempDB вынесена на самый быстрый диск (NVMe) и разделена на несколько файлов по числу ядер процессора.Системы Линейных Уравнений (СЛУ) помогает при расчете косвенных затрат, в случае проблем с партионным учетом важнее проверить настройку «Количество потоков обновления партий». Попробуем уменьшить количество потоков до 2-4 (вместо авто-настройки или высоких значений). Парадоксально, но это часто ускоряет расчет за счет снижения блокировок на уровне базы данных.Чтобы найти конкретную номенклатуру или склад, вызывающий зацикливание, проанализируем следующие отчеты и регистры:
Применяя эти методы системно — от анализа логов графа до проверки чистоты данных в регистрах — мы сможем вернуть время закрытия месяца к нормативным показателям.