Как использовать новые возможности настройки индексов и серверных оповещений в 1С:Предприятие 8.3.26

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

С выходом релиза платформы 1С:Предприятие 8.3.26 разработчики получили в руки мощнейшие инструменты для глубокой оптимизации производительности систем. В этой статье мы подробно разберем, как работают новые механизмы настройки индексов, выясним, что такое «покрывающие» и «условные» индексы, и проанализируем долгожданную технологию вызова клиента с сервера. Эти изменения позволяют не просто ускорить запросы, но и в корне изменить подход к проектированию высоконагруженных систем.

Повышение гибкости настройки индексов: Покрывающие индексы (Included Columns)

Рассмотрим одну из самых значимых функций — возможность добавления дополнительных полей в индекс. В классической архитектуре 1С до версии 8.3.26 любой индекс состоял только из ключевых полей, по которым осуществляется поиск. Если ваш запрос выбирал поля, не входящие в этот индекс, СУБД приходилось выполнять операцию Key Lookup или Bookmark Lookup, то есть обращаться к основной таблице данных, чтобы «добрать» недостающую информацию. Это создавало лишнюю нагрузку на дисковую подсистему.

Теперь мы можем использовать механизм покрывающих индексов (в терминах SQL — INCLUDE). Проанализируем, как это работает по шагам:

  1. Определение структуры: Мы выбираем основные поля, по которым будет идти поиск (например, Поставщик и Валюта), и добавляем в «Дополнительные поля» те данные, которые мы просто хотим прочитать (например, Склад).
  2. Хранение данных: Дополнительные поля не участвуют в иерархии поиска B-Tree, они хранятся только на «листовом» уровне индекса.
  3. Результат выполнения: СУБД находит нужную ветку индекса и сразу считывает из неё значение поля Склад. Обращения к таблице (Clustered Index) не происходит. Это называется Index-Only Scan.

Выясним, в каких случаях это максимально эффективно. В первую очередь это Регистры бухгалтерии и тяжелые Регистры сведений. Если вы часто выбираете конкретный ресурс или реквизит по определенному набору измерений, добавление этого ресурса в «Дополнительные поля» индекса может ускорить выборку в десятки раз.

Условные (фильтруемые) индексы

Разберем еще одно революционное новшество — условные индексы. Часто в огромных таблицах (например, миллионы записей в журнале документов) нам нужно быстро искать данные только по «актуальным» записям. Раньше индекс строился по всей таблице, занимая место и замедляя запись.

Проанализируем преимущества настройки фильтра в индексе:

Индексы в расширениях конфигурации

Ситуация, знакомая каждому внедренцу: в типовой конфигурации (например, 1С:ERP) не хватает индекса для специфического отчета. Раньше приходилось снимать объект с поддержки, что усложняло дальнейшие обновления. Рассмотрим, как 8.3.26 решает эту проблему.

Теперь мы можем добавлять и настраивать индексы напрямую в расширении. Это позволяет оптимизировать запросы в тиражных решениях, сохраняя «чистоту» основной конфигурации. Платформа самостоятельно сформирует команды CREATE INDEX на уровне СУБД при применении расширения.

Механизм вызова клиента с сервера (Server Push)

Перейдем к технической части взаимодействия систем. Долгое время 1С работала по принципу «клиент всегда инициатор». Чтобы узнать, завершилось ли фоновое задание на сервере, нам приходилось использовать ПодключитьОбработчикОжидания, который каждые несколько секунд «дергал» сервер запросами.

В релизе 8.3.26 реализован полноценный вызов клиента с сервера. Посмотрим, как это устроено:

Для реализации этого механизма используется протокол WebSocket (для веб-клиента) и прямой TCP-канал для тонкого клиента. Теперь сервер может отправить уведомление конкретному пользователю или группе пользователей мгновенно.

Рассмотрим пример сценария использования:

  1. Пользователь запускает тяжелый расчет себестоимости.
  2. Клиентское приложение остается свободным для работы, никакого «ожидания» не требуется.
  3. По завершении расчета на сервере вызывается новый метод ОповеститьКлиента().
  4. У пользователя мгновенно всплывает уведомление или обновляется форма.

Проанализируем синтаксис (схематично), который становится доступен разработчику:


// Пример на стороне сервера в фоновом задании
Процедура ЗавершитьДлительнуюОперацию(Параметры) Экспорт
    // Выполняем расчеты...
    
    ДанныеОповещения = Новый Структура("Статус, Сообщение", "Успех", "Расчет завершен успешно");
    ОповеститьКлиента("СобытиеЗавершенияРасчета", ДанныеОповещения, Параметры.ИдентификаторКлиента);
КонецПроцедуры

Работа с JSON и оптимизация PostgreSQL

Для тех, кто использует PostgreSQL, версия 8.3.26 приносит значительные улучшения в работе с текстовым поиском. Рассмотрим использование оператора ПОДОБНО. Теперь платформа более эффективно задействует возможности индексов gin_trgm_ops, что делает поиск по подстроке в справочниках с миллионами записей практически мгновенным.

Также разберем работу с JSON. Современные учетные системы всё чаще хранят неструктурированные данные в полях типа «Строка неограниченной длины» в формате JSON. В новом релизе реализована поддержка функциональных индексов по полям JSON. Это означает, что СУБД может индексировать конкретное значение внутри JSON-строки, не десериализуя весь объект при каждом запросе.

Контроль избыточности индексов

Важно помнить предостережение, прозвучавшее в обсуждении: «балбесы индексов наколбасят». Большое количество индексов существенно замедляет операции записи (INSERT, UPDATE, DELETE), так как СУБД вынуждена обновлять каждое дерево индексов.

Проанализируем, как платформа помогает избежать ошибок:

Практические советы по внедрению

Подводя итог, разберем алгоритм действий для перехода на новые рельсы оптимизации:

  1. Анализ планов запросов: Сначала выявите наиболее медленные запросы через замер производительности или ЦУП (Центр управления производительностью).
  2. Проверка на Index Lookups: Если в плане запроса вы видите, что индекс используется (Index Seek), но после него идет дорогой Lookup в таблицу — добавьте недостающие поля в Дополнительные поля индекса в 1С.
  3. Использование условных индексов: Если ваша логика часто фильтрует данные по статусам (например, Актуально = Истина), создайте условный индекс.
  4. Отказ от обработчиков ожидания: Переведите длительные операции на механизм ОповеститьКлиента(), чтобы снизить паразитную нагрузку на сервер и улучшить UX пользователей.

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

← На главную