Почему тормозит журнал документов и как ускорить его работу?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

Часто в крупных конфигурациях 1С, где количество документов в журнале исчисляется миллионами, пользователи сталкиваются с тем, что форма списка открывается или листается очень долго. В данной статье мы разберем, почему это происходит и как эффективно решить проблему средствами 1С и SQL Server.

Анализ проблемы: почему запрос выполняется медленно?

Когда вы открываете журнал документов в 1С и устанавливаете отбор (например, по Складу или Статусу), платформа формирует SQL-запрос с использованием TOP N для постраничного вывода. Если оптимизатор SQL Server «не понимает», как лучше выбрать данные, он может пойти по неоптимальному пути.

Типичная проблема выглядит следующим образом:

  1. Сервер выбирает все записи, удовлетворяющие отбору по индексу.
  2. Для каждой найденной записи выполняется Key Lookup к кластерному индексу таблицы, чтобы «дочитать» недостающие данные (дату, номер, ссылки на реквизиты).
  3. Результат сортируется в оперативной памяти, и только после этого возвращаются первые 44 записи.

Если записей с отбором миллионы, а в индексе нет необходимых полей для сортировки, система выполняет колоссальный объем лишней работы. Это приводит к длительному выполнению запроса, который может занимать десятки секунд или даже минуты.

Решение: Индексирование с доп. упорядочиванием

Самый эффективный и правильный способ решения данной задачи в 1С — это использование встроенного механизма Индексировать с доп. упорядочиванием. Эта настройка позволяет 1С автоматически включать нужный вам реквизит в состав индекса, который уже содержит поля основного упорядочивания журнала (обычно это Дата, Ссылка).

Рассмотрим, как это работает:

  1. В конфигураторе откройте дерево метаданных и найдите нужный Журнал документов.
  2. Перейдите в свойства реквизита, по которому пользователи часто делают отбор.
  3. В свойстве Индексировать выберите значение Индексировать с доп. упорядочиванием.
  4. После этого сохраните конфигурацию БД. Платформа перестроит индексы, добавив выбранное поле в состав составного индекса журнала.

Благодаря этому действию, SQL Server получит возможность находить записи, соответствующие отбору, которые уже отсортированы в нужном порядке. Поиск превращается из сканирования огромного массива данных в быстрый Index Seek, что дает мгновенный отклик формы списка.

Особенности работы с планами запросов

Иногда даже после оптимизации запрос продолжает тормозить. Это может быть связано с эффектом Parameter Sniffing. SQL Server кэширует план выполнения запроса, основываясь на первом параметре, с которым он был вызван. Если первый отбор был по редкому значению, план может оказаться неэффективным для всех последующих операций с частыми значениями.

При использовании Индексировать с доп. упорядочиванием происходит принудительная реструктуризация таблицы, которая эффективно «сбрасывает» старые, неоптимальные планы из кэша SQL Server, позволяя системе построить новый, более точный план исполнения.

Дополнительные советы для оптимизации

Помимо основного решения, важно помнить о следующих нюансах:

Пример использования хеширования для поиска уникальных объектов (например, марок товаров), которые могут быть интегрированы в систему как специфические строковые реквизиты:


Функция ПолучитьХешМарки(КодМарки) Экспорт
    Хеширование = Новый ХешированиеДанных(ХешФункция.MD5);
    Хеширование.Добавить(КодМарки);
    ДвоичныеДанныеХеша = Хеширование.ХешСумма;
    Возврат ПолучитьСтрокуИзДвоичныхДанных(ДвоичныеДанныеХеша, "UTF-16LE");
КонецФункции

Используя этот подход, вы сможете значительно повысить производительность работы с большими данными в 1С, обеспечивая комфортную работу пользователей даже при наличии миллионов записей в журнале.

← На главную