20.1.23

Хитрость №2. Проектирование DWH и кубов на MS SQL/SSAS: оптимизируем процессинг DC-групп мер

http://www.sql.ru/blogs/dwh/1231

Автор: Критик

Когда мы создаем в SSAS меру типа distinct count, она по-умолчанию создается в новой группе мер, причем метаданные источника данных копируется из исходной группы мер. То есть, если исходная группа мер содержала в себе 50 секций, то определения(запросы) этих секций абсолютно таком же виде скопируются в новую группу мер.



Удобно? На первый взгляд да.

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

Почему так происходит?

Первый момент: если запустить Profiler, то можно увидеть, что запрос, поступающий в хранилище, содержит сортировку по тому полю, по которому построена distinct count-мера. Построением нужного индекса можно существенно ускорить такой запрос. Этот момент очевиден и применяется достаточно часто.

Второй момент: напомню, что distinct count-секции генерируются на основе секций некоторой исходной группы мер. А эти исходные секции часто основаны на представлениях. Вот тут-то и зарыта собака.
Рассмотрим на примере: куб "Продажи" с данными о себестоимости товаров, пусть здесь в качестве источника данных выступает преставление, в котором факты продаж джойнятся с табличкой себестоимости товара. Это значит, что СУБД должена сначала выполнить объединение данных, затем их отсортировать, причем эта самая себестоимость в данном случае нам фактически не нужна! А если она не нужна, то от нее стоит избавится и взять в качестве источника сразу таблицу продаж, а не автоматически сгенерированное представление. То есть стоит чуть-чуть поработать руками и заменить в источник данных для этой группы мер.

Этот подход может в разы увеличить скорость процессинга, особенно на кубах, содержащих несколько distinct count-мер.

Комментариев нет:

Отправить комментарий