При работе с высоконагруженными базами данных в конфигурациях «1С:Предприятие» пользователи и администраторы нередко сталкиваются с ситуацией, когда открытие списка движений регистра накопления (например, ПартииТоваровОрганизаций) занимает десятки минут или даже часов. Особенно остро эта проблема проявляется в таблицах, содержащих десятки миллионов записей.
Разберем причины такого поведения платформы, проанализируем взаимодействие динамического списка с индексами СУБД и рассмотрим пошаговые способы ускорения работы формы.
Основная причина длительного открытия формы кроется в несоответствии установленной пользовательской сортировки физической структуре индексов таблицы регистра в СУБД.
Рассмотрим, как устроен регистр накопления на уровне базы данных:
Период + Регистратор + НомерСтроки.Регистратор в структуре регистра отсутствует (он является лишь вторым полем составного индекса).Период, сервер СУБД мгновенно считывает первые несколько десятков строк прямо из индекса (операция Index Seek или направленный Index Scan) и сразу возвращает их на клиент.Регистратор, СУБД не может применить индекс для быстрой выборки первых N строк. В этом случае серверу приходится выполнять полное сканирование всей многомиллионной таблицы (Table Scan / полный Index Scan), выгружать все данные во временную память (tempdb) и производить тяжелую сортировку всего массива записей перед выдачей первой страницы.Самый быстрый и действенный способ нормализовать время открытия списка — переключить сортировку на поля, входящие в основной индекс таблицы.
Разберем по шагам, как исправить порядок сортировки:
Регистратор.Период (по возрастанию или по убыванию).После применения этой настройки динамический список начинает считывать порции данных за доли секунды даже в таблицах с объемом более 20–30 млн записей.
Если форма списка разрабатывается или дорабатывается в конфигураторе, важно проконтролировать ключевые свойства динамического списка:
ДинамическийСписок включено свойство ДинамическоеСчитываниеДанных. Если этот флаг снят, платформа пытается загрузить всю таблицу целиком в память клиентского приложения, что гарантированно приведет к зависанию.Период, Регистратор, НомерСтроки). Это позволит платформе корректно генерировать выборки срезов данных.Если сортировка настроена правильно, но форма все равно открывается медленно, проанализируем сопутствующие факторы производительности:
FULLSCAN для таблиц регистров накопления.Нередко пользователи открывают форму регистра накопления ПартииТоваровОрганизаций исключительно ради служебных действий (например, для интерактивного нажатия кнопки расчета или актуализации партий).
Рассмотрим, как правильно организовать работу с партионным учетом:
Регламентные операции по закрытию месяца).