Skip to content

Влияние выражений представления на производительность отчетов (СКД)

При использовании набора данных (в схемах компоновки данных) вида «объект» для последующего вывода информации (из этих объектов) в отчетах при помощи инструментов компоновки данных, корректность настройки выражений представления может оказывать ощутимое влияние на скорость формирования отчетов.

Проблема.

Версия технологической платформы: 8.2.17.143

При выводе информации из наборов данных вида «объект» средствами инструментов компоновки данных для полей ссылочного типа, в качестве выражений представления необходимо указывать поля содержащие значения примитивных типов (строка, число и пр.). В противном случае представления для всех выводимых полей ссылочного типа будут рассчитываться процессором вывода результата компоновки данных в табличный документ (см. описание в синтаксис-помощнике конфигуратора) при помощи «запросов в цикле».

Рассмотрим ситуацию на примере. Имеем простейший отчет, в котором выводятся данные из объекта «ТЗДанных» (тип «таблица значений»), содержащего одну колонку ссылочного типа (справочник «киДоговоры»):

Вывод информации из набора данных в отчет осуществляется при помощи инструментов компоновки данных:

(Внимание) Выражение представления для поля ссылочного типа не заполнено:

Это означает, что при выводе отчета оно (представление ссылки) будет вычисляться «на лету». Рассмотрим алгоритм (один из вариантов), используемый технологической платформой для вычисления представлений полей ссылочного типа.
Перед формированием отчета, запускаем SQL Profiler для сбора информации о запросах, которые поступают с сервера приложения на сервер БД. После завершения процедуры формирования отчета останавливаем сбор информации.

Первым технологическая платформа направила СУБД запрос, для формирования набора данных:

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

При выполнении этой команды на сервер БД поступает 5 одинаковых запросов, но с разными параметрами:

Т.к. в отчет выводится 5 ссылок на элементы справочника, для них необходимо определить представление. В нашей ситуации для вычисления представлений технологической платформой используется следующий алгоритм:

Т.к. тип значения ссылочного поля заранее не определен, в набор данных вида «объект» может попасть любая ссылка, к тому же алгоритм заполнения таблицы значений (являющейся источником для набора данных) компоновщику неизвестен, для вычисления представлений поля используются запросы текст которых формируется «на лету». При их (запросов) формировании используется информация о типе ссылки и настройках представления для объектов к которым относится ссылка (в нашем случае это всегда элементы справочника «киДоговоры» для которых основное представление в конфигурации определяется полем «Код»).

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

1. При выводе полей ссылочного типа сначала формируется индекс во временной таблице со всеми ссылками, представление для которых нужно получить. Индекс создается короткими запросами INSERT, количество этих запросов равно количеству ссылок, представление для которых необходимо получить (запросы в цикле). Вот пример таких запросов (для формирования временной таблицы из двух ссылок):

2. Далее производится соединение индекса (по ссылкам) с таблицей, содержащей представление ссылки (здесь СУБД сама решает какой индекс целесообразно использовать):

Решение.

1. Дополнить таблицу значений, являющуюся источником для набора данных вида «объект» колонкой, содержащей представление ссылки:

2. Добавить поле, ссылающееся на колонку с представлением ссылки и указать его в «выражении представления»:

Теперь сравним скорость формирования оригинальной версии отчета со скоростью формирования модернизированной:

(для чистоты эксперимента перед выполнением каждого и замеров в СУБД выполнялась очистка процедурного и буферного кэшей)

Be First to Comment

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *