Подходы, приводящие к просадке производительности АХД

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

Ошибка На что влияет Пример Что делать Причины
1

Множество локальных размерностей

Количество уникальных записей по локальной размерности сильно меньше, чем строк в таблице фактов

  • Долгий прогрев кэша размерностей куба
  • Долгий DiscoverTree (раскрытие структуры куба в OLAPe)
Таблица фактов куба содержит 12 млн строк, а локальные размерности - несколько значений, например, Да/Нет или Федеральный округ Необходимо убрать локальную размерность и вынести значения в общую размерность (отдельную таблицу)

При общей размерности со значениями Да/Нет Mondrian:

  1. получит 2 записи из таблицы с данными
  2. закэширует значения

При локальной размерности со значениями Да/Нет Mondrian:

  1. пробежится по всем 12 млн записей из таблицы фактов
  2. вычислит уникальные значения размерности
  3. закэширует значения

Выполнение операции получения уникальных значений (distinct) является дорогостоящей

2

Не соответствие витрины данных данным, требуемым в отчете:

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


  • Скорость расчета агрегатов
  • Количество данных в таблице фактов

Отчет формируется с нарастающим итогом на текущий день (зависит от фактической даты формирования отчета)

Необходимо выделять:

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

Общая витрина со всеми данными:

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

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

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

  • отображаются агрегаты без необходимости считать нарастающий итог
  • прирост таблицы фактов не зависит от необходимости считать нарастающий итог
3

Высокая гранулярность данных:

  • Отчеты, в которых десятки тысяч строк и нет необходимости агрегатов по уровням
  • Количество уникальных элементов размерности на оси строк близко к количеству строк в таблице фактов
  • Расчет агрегатов
  • Формирование представления
Построчный отчет в разрезе номеров договоров

Вместо отчета с источником OLAP необходимо делать отдельные таблицы и отчеты с источником Реестр

OLAP:

  • не зависимо от степени детализации значение каждой ячейки вычисляется как агрегат на пересечении строк/столбцов

Реестр:

  • выводятся построчные данные
4 Разные значения атрибутов для одного элемента размерности
  • Количество рассчитываемых агрегатов
  • Размер полученного результат запроса

У иерархии по организациям атрибут с полным наименованием содержит несколько вариантов написания

Размерность построена на версионном справочнике, где в качестве элемента выводится значение, соответствующее нескольким строкам в справочнике

Для UniqueName обеспечить уникальную запись в таблице размерности, т.е. исключить дублирующиеся значения (реализовать дедупликацию элементов иерархии) путем:

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

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

5 Первичные ключи для связи с кубом и поля в хранилище общей размерности имеют необоснованный длину и/или тип
  • Хранение и скорость получения значения элементов размерности
В качестве поля для связи с размерностью или поля в хранилище используется текстовое поле с полным наименованием контрагента или значением классификатора

Для связи с размерностью и идентификации элементов размерности использовать ключи:

  • поля с типом ссылка на объект (идентификатор)
  • поля с типом целое число (коды)
  • поля с типом строка с сопоставимым натуральным значением (аббревиатура, текстовый код)

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

При обращении к элементам размерности в mdx формулах увеличивается размер запроса за счет длинных обозначений UniqueName

6 Не настроена фильтрация иерархий в оси строк/столбцов, недостаточность атрибутов уровня размерности для фильтрации данных
  • Количество агрегатов по элементам размерности

Элементы размерности на оси/строк столбцов можно отфильтровать на основании атрибута иерархии, но на ось настроено скрытие пустых значений, а само значение атрибута (свойство элемента размерности):

  • выведено на ось фильтров в виде отдельной размерности
  • анализируется на уровне расчетного элемента

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

Настроить (прописать) фильтр на оси строк/столбцов в соответствии с параметрами и условиями отчета, таким образом, чтобы элементы, которые не анализируются в отчете не выводились в отчет и не участвовали в расчете

Уменьшить выборку элементов посредством фильтра - это приводит к уменьшению количества рассчитываемых агрегатов и размера запроса

При отсутствии фильтра на оси строк/столбцов:

  1. Разворачиваются элементы размерности, в т.ч. "лишние"
  2. Считаются агрегаты по каждому развернутому элементу размерности
  3. Отсеиваются строки/столбцы, которые не должны были попасть в отчет согласно параметрам или условиям отчета

Таким образом, растет количество агрегатов и размер обрабатываемого запроса

7

Неконсистентность данных:

  • пустые поля для связи с размерностью
  • расчет итогов через расчетные элементы, а не через стандартные агрегаты
  • Расчет агрегатов
  • Не все строки таблицы фактов куба однозначно связаны с элементами размерности
  • Агрегат по иерархии больше суммарного значения по элементам размерности
  • Обеспечить консистентность данных на этапе загрузки
  • Связывать записи в таблице фактов с фиктивными элементами размерности


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