Каждый разработчик 1С рано или поздно сталкивается с проблемой производительности запросов. Мы пишем лаконичный запрос на декларативном языке 1С, но СУБД (будь то MS SQL Server или PostgreSQL) выполняет его физический аналог. Когда мы пытаемся проанализировать план выполнения этого запроса в стандартных средствах СУБД, перед нами предстает полотно из физических имен таблиц вида _InfoReg12345 и полей вроде _Fld12345_TYPE. Читать такой план крайне затруднительно, а сопоставление физических имен с объектами метаданных 1С вручную занимает огромное количество времени.
В этой статье мы подробно разберем, как автоматизировать этот процесс, и рассмотрим лучшие инструменты для представления планов выполнения SQL-запросов в привычных терминах конфигурации 1С.
Платформа 1С:Предприятие транслирует объекты метаданных в физические таблицы базы данных по определенным правилам. Например:
_ReferenceXX._DocumentXX._InfoRegXX._VTXX.Понять без специального словаря (маппинга), какой именно справочник скрывается под именем _Reference45, невозможно. Ситуация усложняется индексами: СУБД строит план на основе физических индексов, имена которых также абстрактны. Чтобы решить эту проблему, нам нужны инструменты, которые автоматически переведут физическую структуру СУБД на язык метаданных 1С прямо внутри графического или текстового плана выполнения.
Один из самых мощных и проверенных временем инструментов для решения этой задачи — проект «Инструменты разработчика» (ИР). Для глубокого анализа планов запросов в нем предусмотрен специализированный инструмент.
Выясним, как правильно им воспользоваться для получения плана запроса в терминах 1С:
_Document150 мы увидим Документ.РеализацияТоваровУслуг, а вместо _Fld151RRef — реквизит Контрагент).Также в составе «Инструментов разработчика» есть подсистема «Анализ технологического журнала». Она позволяет импортировать файлы технологического журнала 1С, содержащие планы запросов СУБД, и автоматически декодировать их в терминах метаданных 1С.
Если вы ищете удобное решение для управляемого приложения, обратите внимание на подсистему анализа планов запросов в составе «Управляемой консоли отчетов» (УКО). Этот инструмент работает на основе парсинга планов, полученных из технологического журнала (ТЖ) 1С. Для интерактивной работы с планами выполнения и структурой запросов подойдёт управляемая консоль запросов и отчетов с анализом плана запроса.
Рассмотрим подробнее ключевые возможности этого решения:
Не все знают, что современная стандартная обработка «Консоль запросов» для управляемого приложения (доступная на ИТС) уже имеет базовый встроенный функционал для работы с планами выполнения:
EXPLAIN, полученный через технологический журнал платформы.Чтобы сторонние инструменты (такие как УКО или Анализ ТЖ в ИР) могли визуализировать планы, нам необходимо предварительно собрать их с помощью технологического журнала 1С. Разберем по шагам, как настроить файл конфигурации logcfg.xml для сбора планов выполнения.
Создадим файл конфигурации со следующим содержимым:
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="C:\v8_logs\query_plans" history="12">
<event filter="dbmssql">
<eq property="Name" value="DBMSSQL"/>
<nonempty property="plansql"/>
</event>
<event filter="dbpostgrs">
<eq property="Name" value="DBPOSTGRS"/>
<nonempty property="plansql"/>
</event>
<property name="all"/>
</log>
</config>
Проанализируем эту настройку:
DBMSSQL (для MS SQL Server) и DBPOSTGRS (для PostgreSQL).nonempty property="plansql" указывает платформе, что в журнал нужно записывать только те события СУБД, для которых был успешно построен и зафиксирован план выполнения запроса.C:\v8_logs\query_plans и храниться там 12 часов.После того как файлы ТЖ будут сформированы, вы сможете загрузить их в «Управляемую консоль отчетов» или «Инструменты разработчика», где они автоматически преобразуются в термины метаданных 1С.
С переходом многих систем 1С на СУБД PostgreSQL классические методы трассировки MS SQL уступили место анализу планов PostgreSQL. Здесь есть своя специфика:
EXPLAIN (ANALYZE, BUFFERS, FORMAT XML) или в текстовом виде.Seq Scan (последовательное чтение всей таблицы) на крупных таблицах метаданных 1С.Если вы хотите написать собственную обработку или скрипт для автоматического декодирования сырых SQL-планов, вам потребуется механизм сопоставления имен. На сегодняшний день в сообществе 1С-разработчиков активно используются специализированные библиотеки с открытым исходным кодом, например DaJet.Metadata.
Посмотрим, как устроен этот процесс изнутри:
Params, файл DBNames и таблица Config)._InfoReg120) и их поля (_Fld121RRef) с реальными объектами конфигурации и их реквизитами.Для эффективного анализа планов выполнения запросов в терминах 1С придерживайтесь следующих правил:
plansql и используйте парсеры метаданных для удобной трансляции физических имен перед отправкой планов во внешние визуализаторы.