Агрегаты оборотных регистров накопления

Jul 18, 2022 23:32

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

1. Основные понятия

При дальнейшем рассмотрении работы с агрегатами будут использоваться некоторые термины, которые мы определим в этом разделе.

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

Агрегат характеризуется следующими параметрами:

- Размер агрегата ‑ это размер таблицы агрегата. Оценочный показатель.

- Эффект ‑ ожидаемое уменьшение среднего времени выполнения запроса с использованием агрегатов. Например, если эффект агрегата равен 90 %, то это означает, что среднее время выполнения запроса с использованием агрегатов будет на 90 % меньше, чем среднее время выполнения того же запроса, но с использованием итогов. Оценочный показатель.

Период агрегата ‑ интервал дат, данные за который помещены в агрегат.

Периодичность агрегата ‑ периодичность, с которой в агрегате хранятся данные.

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

Статистика использования ‑ информация о том, какие запросы (измерения, период, периодичность) выполняются к регистру. Используется для перестроения агрегатов и получения оптимального списка агрегатов.

Оптимальный список агрегатов ‑ список агрегатов, соотношение размера и эффекта которых является оптимальным для текущего состояния регистра (его движений и статистики использования).

Режим агрегатов/итогов ‑ если установлен режим агрегатов, то при выполнении запросов будут использоваться данные агрегатов; если установлен режим итогов, то при выполнении запросов будут использоваться данные итогов.

Использование агрегатов ‑ выключение использования агрегатов означает, что при изменении движений не будет выполняться никаких операций над агрегатами. Выключать использование агрегатов имеет смысл на время массированной загрузки данных в регистры, однако последующее включение использования агрегатов может привести к ресурсоемкому процессу актуализации агрегатов (если изменяемые данные находятся внутри периода агрегатов).

2. Общая схема работы с агрегатами

Приведем общую схему работы с агрегатами:



Рис 1 Общая схема работы с агрегатами (клиент-серверный вариант)

ПРИМЕЧАНИЕ. Данная схема описывает работу с одним регистром. Если необходимо работать с несколькими регистрами, то операцию, выполняемую на каждом шаге, следует выполнить для каждого регистра.

Более подробно распишем приведенную схему работы:

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

Если агрегаты решено создавать в конфигураторе, то это можно сделать несколькими способами:

- Рассчитать (например, в режиме итогов) и загрузить оптимальные агрегаты (метод ОпределитьОптимальныеАгрегаты()). Если агрегаты ранее не использовались, то список оптимальных агрегатов будет получен только на основании таблицы движений регистра. Если агрегаты использовались, то список оптимальных агрегатов будет построен на основании таблицы движений и статистики использования.
- Создать собственный список агрегатов на основании анализа запросов к регистру.

2. После обновления конфигурации базы данных включить для регистра режим агрегатов (метод УстановитьРежимАгрегатов()).

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

Если агрегаты созданы в конфигураторе, то при выполнении операции перестроения с ними будут выполняться следующие действия:

- Агрегат будет включен в том случае, если вариант использования агрегата установлен в значение Всегда. Оценка эффективности использования такого агрегата не влияет на его использование.

- Агрегат будет включен на основании оценки эффективности использования в том случае, если режим использования агрегата установлен в значение Авто. Использование данного агрегата оценивается наряду с агрегатами, которые система создает автоматически. Если автоматически создаваемый агрегат окажется эффективнее агрегата, созданного в конфигураторе с режимом использования Авто, то будет использоваться автоматически создаваемый агрегат.

4. Затем необходимо выполнить обновление агрегатов (метод ОбновитьАгрегаты()). Обновление агрегатов производит перенос данных из таблиц движений выбранного регистра в соответствующие таблицы агрегатов. Переносятся те движения, которые были созданы в таблице движений после предыдущего обновления агрегатов.

5. Далее следует накопить статистику использования созданных агрегатов. Для этого следует в течение некоторого интервала времени (например, 1 месяц) выполнять типовые задачи, в которых используются данные из регистра, для которого был включен режим агрегатов. В процессе работы необходимо регулярно выполнять обновление агрегатов. По истечению этого периода следует выполнить перестроение агрегатов (шаг 3) и регулярно повторять операции шагов 3 ‑ 5.

Рассмотренная схема описывает подход к работе с агрегатами регистра в клиент-серверном варианте.

В файловом варианте использования системы, работа с агрегатами выглядит несколько по-иному:



Рис2 Общая схема работы с агрегатами (файловый вариант)

Основное отличие этой схемы от общей схемы работы с агрегатами (см. рис. 27) заключается в следующем (будут описаны только отличия):

- На шаге 1 список агрегатов в конфигураторе следует создавать обязательно.
- Шаг 6. Пересчет оптимальных агрегатов (метод ОпределитьОптимальныеАгрегаты()) следует выполнять с некоторой регулярностью (например, 1 месяц). Во время этого периода (1 месяц) следует выполнять типовые задачи, в которых используются данные из регистра, для которого был включен режим агрегатов. В процессе работы необходимо регулярно выполнять обновление агрегатов.
- Шаг 7. После получения нового списка оптимальных агрегатов, необходимо определить, требуется изменение списка агрегатов в метаданных конфигурации или нет. Если изменение не требуется, то следует продолжить работу, перейдя на шаг 3.
- Шаг 8. Если необходимо выполнить обновление списка агрегатов, то следует выполнить загрузку необходимых (или всех) агрегатов (из списка оптимальных). Затем нужно обновить конфигурацию базы данных (произойдет реструктуризация информационной базы) и потом продолжить работу с шага 3.

Рекомендации по выполнению каждого из рассмотренных шагов рассматриваются в следующем разделе.

3. Рекомендации по использованию агрегатов
Формирование списка агрегатов

Формирование списка агрегатов можно выполнять несколькими способами. Если агрегаты планируется включить для регистра, уже существующего в конфигурации, но для которого не было включено использование агрегатов, то это можно сделать следующими способами:

1. Если в регистре отсутствуют движения или движений мало (не более 2-3 тысяч записей), следует выполнить анализ запросов, которые используют выбранный регистр, и получить перечень часто используемых комбинаций измерений, отборов, периодов запросов и периодичности получения данных. На основании полученной информации создать список агрегатов, при этом постараться минимизировать количество используемых агрегатов.

2. Если в регистре присутствует существенное количество записей (более 3 тысяч), то можно выполнить расчет оптимальных агрегатов на основании данных регистра с помощью метода ОпределитьОптимальныеАгрегаты() и загрузить полученный список агрегатов.

Если для используемого регистра был включен режим агрегатов и включено использование агрегатов (т. е. каким-то образом сформирован первоначальный список агрегатов), то можно также получить список оптимальных агрегатов и загрузить его в конфигураторе. Отличие этого способа от способа номер 2 заключается в том, что в этом случае для расчета оптимальных агрегатов будет использоваться статистика, которую ведет система. Поэтому полученный список агрегатов будет более эффективен, нежели получение оптимальных агрегатов для регистра, у которого не был включен режим агрегатов и использование агрегатов.

ПРИМЕЧАНИЕ. Использовать метод получения оптимальных агрегатов имеет смысл в том случае, если в таблице движений регистра находятся не менее 3-5 тысяч записей. На меньшем количестве записей построенный список агрегатов может оказаться неэффективным.

Выполнение перестроения

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

Также следует помнить, что операция перестроения эффективна в том случае, если для ее работы накоплен достаточно большой объем статистических данных.

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

1. есть вероятность изменения характера данных в регистре;
2. есть подозрения на изменение характера запросов (что приведет к изменению накапливаемой статистики).
3. При выполнении операции следует указать два параметра:

--Максимальный относительный размер ‑ задает ограничение на размер формируемого списка агрегатов (в процентах от таблицы движений). Если параметр равен 0, то ограничения на размер агрегатов не задаются.

- Минимальный эффект от перестроения ‑ процент, на который необходимо увеличить эффект старого списка при перестроении. Если новый список увеличивает эффект на заданное значение, то метод реально перестраивает список. Если параметр не указан или равен 0, это означает отсутствие требований к минимальному эффекту.

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

ПРИМЕЧАНИЕ. Операция перестроения является достаточно длительной и ресурсоемкой процедурой. Не рекомендуется выполнять ее во время интенсивной работы с информационной базой других пользователей.

Выполнение операции обновления агрегатов

Данную операцию рекомендуется выполнять чаще, чем выполняется операция перестроения агрегатов.

Обновление агрегатов может выполняться двумя способами:

- Полностью обновляются все агрегаты, отмеченные как используемые. Это может занимать существенное время.

- Так называемое «порционное» заполнение. В этом случае за одно обращение обновляется период, равный 1 месяцу в 10 агрегатах.

При выполнении операции следует указать параметр Максимальный относительный размер. Он задает ограничение на размер формируемого списка агрегатов (в процентах от таблицы движений). Если параметр равен 0, то ограничения на размер агрегатов не задаются.

Примечание. Желательно выполнять данную операцию в периоды минимальной нагрузки на информационную базу.

Совет. Рекомендуется использовать режим разделения итогов при использовании агрегатов, особенно если обновление агрегатов выполняется регламентным заданием на фоне интенсивного проведения документов, связанных с регистром, у которого выполняется обновление агрегатов.

Использование агрегатов

Для определения агрегата, который будет использоваться для запроса, будет использован алгоритм, который будет описан далее.

В запросе выделяются используемые измерения регистра, потом подбирается перечень агрегатов, которые содержат все используемые измерения, и наиболее полно соответствуют запросу по периодичности и периоду. Из этого списка выбирается агрегат, с минимальным размером. Именно этот агрегат и будет использоваться.

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

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

- С периодичностью месяц;
- С периодичностью день.

Запрос исполняется за период с 15 сентября по 15 ноября. В этом случае будут использованы два агрегата:

- Агрегат с периодичностью месяц будет использован для получения данных за период с 1 октября по 31 октября;
- Агрегат с периодичностью день будет использован для получения данных за периоды с 15 сентября по 30 сентября и с 1 ноября по 15 ноября;
- Данные по разным агрегатам будут суммированы для получения окончательного результата.

Виртуальная таблица оборотов регистра, для которого включен режим агрегатов, всегда содержит актуальные данные.

Выполнение расчета оптимальных агрегатов

Данная операция может выполняться по необходимости, она не является регулярной. Ниже приведен перечень ситуаций, при наступлении которых рекомендуется выполнить расчет списка оптимальных агрегатов:

- по истечении некоторого времени после первичного формирования списка агрегатов;
- в случае существенного падения производительности при текущем списке агрегатов;
- при существенном изменении характера данных;
- при изменении состава запросов к регистру;
- если есть вероятность, что текущий список агрегатов перестал быть оптимальным.

Примечание 1. Для клиент-серверного варианта данная операция не является обязательной. Формирование оптимальных агрегатов (при необходимости) выполняется автоматически во время выполнения перестроения агрегатов.

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

Использование регламентных заданий при работе с агрегатами

Операции перестроения и обновления агрегатов можно выполнять с помощью регламентных заданий. Необходимо соблюдать следующие рекомендации при составлении расписания выполнения регламентных заданий:

- для регламентного задания, выполняющего операции перестроения и обновления, рекомендуется заполнять свойство регламентного задания Ключ
- рекомендуется задавать расписание регламентных заданий перестроения и обновления так, чтобы не возникла ситуация, когда операции обновления и перестроения будут выполняться в одно время.

Соблюдение рекомендаций приведет к предотвращению параллельного выполнения операций перестроения и обновления, что положительно скажется на производительности.

4. Редактирование агрегатов

Создание и редактирование списка агрегатов возможно только для оборотного регистра накопления (свойство Вид регистра имеет значение Обороты). Для вызова конструктора агрегатов следует использовать команду Открыть агрегаты контекстного меню соответствующего регистра.



Рис 3 Вызов конструктора агрегатов

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



Рис 4 Конструктор агрегатов

При создании агрегатов можно указать вариант использования. Если стоит Авто (по умолчанию), то система будет сама определять необходимость использования данного агрегата во время выполнения операции перестроения агрегатов. Если стоит Всегда, значит система будет использовать агрегат всегда.

Колонка Периодичность определяет минимальный период времени, за который агрегат будет хранить итоги по выбранным измерениям. Допускается иметь несколько агрегатов с одинаковым набором измерений, но с разной периодичностью. Не следует злоупотреблять количеством агрегатов. Большое количество агрегатов может привести к излишнему увеличению размера базы данных, но не приведет к повышению производительности работы запросов.

В правой части окна можно указать, какие измерения входят в редактируемый агрегат. Агрегат может включать произвольное количество измерений (но не более 30) и не включать их вовсе. В этом случае система хранит сводные обороты по регистру с заданной периодичностью.

Если существует xml-файл, содержащий список оптимальных агрегатов, то можно выполнить загрузку такого списка. Для этого стоит воспользоваться специальной командой конструктора агрегатов (см. рис. 4) и выбрать там предварительно подготовленный файл.



Загрузка списка оптимальных агрегатов

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

Смотрите также:
Электронный учебник по программированию в 1С
Рекомендации по изучению программирования 1С с нуля
Игра "Кто хочет стать миллионером?" с вопросами на определенную тематику (язык программирования JavaScript, английские, немецкие, французские, испанские, португальские, ни­дер­ландские, итальянские слова, электробезопасность, промышленная безопасность, бокс и т.п.), написанная на 1С
Программирование в 1С 8.3 с нуля - краткий самоучитель
Комплексная подготовка программистов 1С:Предприятие 8.2
Сайты с уроками программирования и со справочниками
Youtube-каналы с уроками программирования
Сайты для обучения программированию
Лекции и уроки

программирование

Previous post Next post
Up