Часто в крупных конфигурациях 1С, где количество документов в журнале исчисляется миллионами, пользователи сталкиваются с тем, что форма списка открывается или листается очень долго. В данной статье мы разберем, почему это происходит и как эффективно решить проблему средствами 1С и SQL Server.
Когда вы открываете журнал документов в 1С и устанавливаете отбор (например, по Складу или Статусу), платформа формирует SQL-запрос с использованием TOP N для постраничного вывода. Если оптимизатор SQL Server «не понимает», как лучше выбрать данные, он может пойти по неоптимальному пути.
Типичная проблема выглядит следующим образом:
Key Lookup к кластерному индексу таблицы, чтобы «дочитать» недостающие данные (дату, номер, ссылки на реквизиты).Если записей с отбором миллионы, а в индексе нет необходимых полей для сортировки, система выполняет колоссальный объем лишней работы. Это приводит к длительному выполнению запроса, который может занимать десятки секунд или даже минуты.
Самый эффективный и правильный способ решения данной задачи в 1С — это использование встроенного механизма Индексировать с доп. упорядочиванием. Эта настройка позволяет 1С автоматически включать нужный вам реквизит в состав индекса, который уже содержит поля основного упорядочивания журнала (обычно это Дата, Ссылка).
Рассмотрим, как это работает:
Журнал документов.Индексировать выберите значение Индексировать с доп. упорядочиванием.Благодаря этому действию, SQL Server получит возможность находить записи, соответствующие отбору, которые уже отсортированы в нужном порядке. Поиск превращается из сканирования огромного массива данных в быстрый Index Seek, что дает мгновенный отклик формы списка.
Иногда даже после оптимизации запрос продолжает тормозить. Это может быть связано с эффектом Parameter Sniffing. SQL Server кэширует план выполнения запроса, основываясь на первом параметре, с которым он был вызван. Если первый отбор был по редкому значению, план может оказаться неэффективным для всех последующих операций с частыми значениями.
При использовании Индексировать с доп. упорядочиванием происходит принудительная реструктуризация таблицы, которая эффективно «сбрасывает» старые, неоптимальные планы из кэша SQL Server, позволяя системе построить новый, более точный план исполнения.
Помимо основного решения, важно помнить о следующих нюансах:
UPDATE STATISTICS помогает не всегда, в сочетании с перестроением индексов это дает наилучший результат.SentryOne Plan Explorer, чтобы наглядно видеть, на каком этапе выполнения запроса возникает задержка.Пример использования хеширования для поиска уникальных объектов (например, марок товаров), которые могут быть интегрированы в систему как специфические строковые реквизиты:
Функция ПолучитьХешМарки(КодМарки) Экспорт
Хеширование = Новый ХешированиеДанных(ХешФункция.MD5);
Хеширование.Добавить(КодМарки);
ДвоичныеДанныеХеша = Хеширование.ХешСумма;
Возврат ПолучитьСтрокуИзДвоичныхДанных(ДвоичныеДанныеХеша, "UTF-16LE");
КонецФункции
Используя этот подход, вы сможете значительно повысить производительность работы с большими данными в 1С, обеспечивая комфортную работу пользователей даже при наличии миллионов записей в журнале.