Выход платформы 1С:Предприятие 8.3.26 стал знаковым событием для сообщества разработчиков. В этом релизе реализованы механизмы, которые ждали десятилетиями: от возможности создавать собственные индексы в базе данных до нативной поддержки современных протоколов интеграции. Мы проанализируем ключевые технические изменения, разберем причины их появления и поймем, как применить эти инструменты для решения реальных задач производительности.
Одной из самых обсуждаемых тем стали пользовательские индексы. Ранее разработчики были ограничены стандартными механизмами индексации (флаги "Индексировать" у реквизитов). В версии 8.3.26 мы получили возможность самостоятельно определять состав индексов для таких объектов, как Справочники, Документы, ПланыОбмена, БизнесПроцессы и Задачи.
Рассмотрим подробнее, почему это важно. В высоконагруженных системах часто возникают ситуации, когда стандартных индексов недостаточно для оптимального выполнения сложных запросов. Например, когда требуется поиск по нескольким полям одновременно или когда необходимо исключить лишние обращения к основной таблице базы данных (механизм Index Only Scan).
Преимущества новых индексов:
РегистрыСведений (так называемые "ключи поиска") только для того, чтобы обеспечить быструю выборку по определенным измерениям. Теперь от части таких "костылей" можно отказаться, создав правильный индекс непосредственно на основном объекте.Разберем ситуацию, когда нам необходимо обработать массив ссылок (например, при выгрузке данных или проведении группы документов). Традиционный обход в цикле с получением объекта через Ссылка.ПолучитьОбъект() порождал огромное количество запросов к СУБД, что катастрофически замедляло работу.
В платформе 8.3.26 появился специализированный метод менеджера объектов ВыбратьПоСсылкам(). Проанализируем пример его использования:
// Массив ссылок, который мы получили ранее
МассивСсылок = Новый Массив;
МассивСсылок.Добавить(Ссылка1);
МассивСсылок.Добавить(Ссылка2);
// Пакетное чтение данных всех объектов одним запросом
Выборка = Справочники.Номенклатура.ВыбратьПоСсылкам(МассивСсылок);
Пока Выборка.Следующий() Цикл
// Работаем с данными объектов без дополнительных обращений к базе
Сообщить(Выборка.Наименование);
КонецЦикла;
Этот метод позволяет платформе автоматически сформировать оптимальный SQL-запрос типа SELECT ... FROM ... WHERE Ссылка IN (...), что радикально сокращает время выполнения операций в коде. Это особенно актуально для фоновых заданий и интеграционных модулей.
Выясним причину проблем производительности в крупных базах (ERP, КА). В современных типовых конфигурациях для ускорения расчета себестоимости используются таблицы ключей аналитики. Однако, как было замечено в обсуждении, это привело к "эффекту домино":
РегистрыСведений с индексами по измерениям склада.С появлением пользовательских индексов и развитием механизмов платформы мы можем ожидать возврата к более прозрачной структуре хранения, где индексы на стороне СУБД будут эффективно справляться с селективностью данных без избыточной денормализации. Также важно помнить о технологическом нюансе обслуживания итогов: вместо ресурсоемких операций DELETE, эффективнее использовать SELECT INTO в промежуточные таблицы, что значительно ускоряет свертку итогов в больших базах.
Посмотрим на развитие механизмов взаимодействия. В 8.3.26 добавлена поддержка вебхуков (Webhooks). Это позволяет 1С выступать в роли слушателя событий от внешних систем. Теперь не нужно постоянно опрашивать сторонний API в бесконечном цикле или через регламентное задание — внешняя система сама пришлет уведомление в 1С при наступлении события.
Также реализован механизм вызова клиентского кода с сервера (Push-уведомления). Рассмотрим пример: фоновое задание на сервере завершило формирование тяжелого отчета. Теперь сервер может инициировать открытие формы этого отчета непосредственно у пользователя. Однако будьте осторожны: в первых сборках зафиксированы ошибки, мешающие корректному закрытию клиентского приложения при использовании этого механизма, поэтому рекомендуется тщательно тестировать функционал перед внедрением.
Проанализируем перспективное направление — работу с ИИ. В платформу добавлены средства для работы с векторными данными. Это позволяет хранить так называемые "эмбеддинги" (числовые представления смысла текста или изображений) и выполнять семантический поиск.
Представьте, что пользователь ищет в справочнике "комплектующие для системного блока", а система находит "видеокарты" и "материнские платы", хотя этих слов нет в запросе. Это становится возможным благодаря векторным индексам, которые теперь поддерживаются на уровне платформы.
Важно учитывать изменения в системных требованиях:
Платформа 8.3.26 предоставляет мощнейшие инструменты для борьбы с деградацией производительности. Мы рекомендуем в первую очередь оценить критические узлы ваших систем, где используются сложные запросы к большим справочникам или документам, и рассмотреть возможность внедрения пользовательских индексов. Также стоит пересмотреть архитектуру интеграционных шин в пользу использования вебхуков, что позволит снизить нецелевую нагрузку на серверы 1С.