вторник, 10 июня 2014 г.

Секционирование(Partitioning) OLAP-кубов в SSAS 2008 R2


Секции являются эффективным и гибким средством управления кубами, особенно крупными. Например, куб, содержащий данные о продажах, может содержать секции для каждого прошедшего года, а также секции для каждого квартала текущего года. При добавлении в куб текущих данных необходимо обрабатывать только текущую  четверть секции. Обработка меньшего количества данных улучшит производительность обработки за счет уменьшения времени обработки. В конце года четыре квартальные секции могут быть объединены в одну, годовую секцию, а для первого квартала нового года создается новая секция. В дальнейшем этот процесс создания новой секции может быть автоматизирован как часть загрузки хранилища данных и процедур обработки куба.
Как уже упоминалось выше, в целях повышения производительности работы кубов, в SSAS предусмотрена возможность разбиения групп мер на секции(Partitions).
При больших объемах данных секционирование  может значительно уменьшить время обработки, а так же уменьшит время обращения к кубу, особенно если секции разнести по разным физическим носителям.
Создать секции можно как в SQL Server Management Studio(SSMS), так и в Business Intelligence Development Studio(BIDS). Рекомендуется создавать  секции в BIDS, т.к. если их сделать в SSMS, т.е. на рабочем кубе, а не в проекте, то при следующем развертывании(Deploy) куба все секции удаляться. Для создания секций в BIDS необходимо в дизайнере куба открыть вкладку «Секции»(Partitions):
Здесь можно увидеть группы мер, список их секций и режимы хранения(подробнее о режимах хранения здесь http://msdn.microsoft.com/ru-ru/library/ms174915(v=sql.105).aspx ).
Для того, что бы разбить на секции группу мер, необходимо сначала изменить текущую секцию. Разбивать на секции будем по дате. Для этого в колонке «Источник»(Source) для секции нажимаем кнопку, которая появляется при получении этим полем фокуса ввода. Появиться окно:
 По умолчанию «Тип привязки»(Binding type) выбран «Привязка таблицы»(Table Binding). Меняем его на «Привязка запроса»(Query Binding),  в окне появиться поле с SQL-запросом, который используется для обращения к базе при обработке куба, с пустым условием WHERE. Так как текущая секция будет обрабатываться каждый день, в условие добавляем выражение для секционирования:
WHERE date >= '2014-06-01'
Перед тем как нажмем кнопку «OK», можно проверить синтаксис введенного запроса, для этого нажимаем «Проверка». Если введенный запрос верен, BIDS  выдаст сообщение «Проверка синтаксиса прошла успешно». Подтверждаем свои намерения нажатием кнопки «ОК», текущая секция создана. Далее необходимо создать секцию (или несколько секций) для исторических данных.
 Для создания секции нажимаем ссылку «Создать секцию»(New Partition). Появиться окно мастера секционирования. Нажимаем «Далее». В появившемся окне поля «Группа мер» и «Источник секций» оставляем с данными определенными по умолчанию. Выбираем таблицу в поле «Доступные таблицы»(Available tables), нажимаем «Далее»
 Появиться окно, где вводиться запрос, в нем отмечаем флажком «Укажите запрос для ограничения строк»(Specify a query to restrict rows) и в запросе пишем условие ограничения:
WHERE date BETWEEN '2013-01-01' AND '2014-05-31' 
 нажимаем «Далее», появиться окно где можно настроить опции «Обработка местоположения» (Processing loaction) и «Место хранения»(Storage location) (т.е. где будут физически лежать файлы для этой секции).  Отмечаем «Указанная папка», и выбираем предварительно созданную папку, если есть возможность разместить данные на более «шустром» локальном или удаленном жестком диске(HDD). 
Подтверждаем место хранения кнопкой «ОК» и в следующем окне нажимаем «Далее».
Иначе оставляем «Место хранения» по умолчанию «Расположение сервера по умолчанию».
В продолжение сценария мастера секционирования, появиться окно, где в поле «Имя»(Name) указываем название секции,  в «Параметры статистической обработки» выбираем пункт «Создать статистические схемы позже»(Design aggregations later) остальное оставляем без изменений и нажимаем «Готово»
 Далее разворачиваем и обрабатываем куб, а в повседневной работе куба,  обрабатываем только секцию с текущими данными, т.к. данные будут обновляться только в ней.
Теперь рассмотрим  подробнее о процессе и типах обработки куба.
Самый удачный, на мой взгляд, процесс обработки куба, это разбиение его на шаги:
1. ProcessUpdate или (ProcessData + ProcessIndexes) обработка измерений;
2. ProcessFull обработка последней секции или инкрементальная(ProcessAdd) для последних данных, если секция большая;
3. ProcessIndexes для остальных секций.
Если использовать ProcessAdd для секции, то важно следить, чтобы вы не добавили одни и те же данные 2 раза в эту секцию. При выполнении XMLA команды ProcessAdd вы передаете скрипит, для вытягивания данных из источника с условиями (например по дате, за вчерашний день). Если вы 5 раз запустите эту XMLA команду, вы 5 раз добавите эти данные в куб.
Что же касается типов обработки, то опишем часто используемые (полный список на http://technet.microsoft.com/ru-ru/library/ms174774(v=sql.105).aspx):
Обработка. По умолчанию (ProcessDefault)
Определяет состояние обработки объекта и выполняет обработку, необходимую для того, чтобы преобразовать необработанные или частично обработанные объекты в полностью обработанное состояние. Данный режим обработки поддерживается для кубов, баз данных, измерений, групп мер, секций, а также моделей и структур интеллектуального анализа.
Обработка. Полная(ProcessFull)
Обрабатывает объект служб Службы Analysis Services и все объекты, которые в нем содержатся. Когда объект, который обрабатывается методом полной обработки, уже был обработан, службы Службы Analysis Services сбрасывают все данные объекта и затем обрабатывают его. Данный тип обработки необходим в том случае, если в объекте произошли структурные изменения, например добавлена, удалена или переименована иерархия атрибута. Данный режим обработки поддерживается для кубов, баз данных, измерений, групп мер, секций, а также моделей и структур интеллектуального анализа.
Обработка. Добавочная(ProcessAdd)
Добавляет новые данные фактов и выполняет обработку только для соответствующих секций. Данный режим обработки поддерживается для групп мер и секций.
Обработка. Обновление(ProcessUpdate)
Выполняет повторное  чтение данных и обновляет атрибуты измерения. Гибкие агрегаты и индексы связанных секций будут сброшены. Например, при помощи этого режима обработки можно добавить новые элементы в измерение и принудительно выполнить повторное чтение всех данных для обновления атрибутов объектов. Данный режим обработки поддерживается для измерений.
Обработка. Индекс(ProcessIndexes)
 Создает или перестраивает индексы и агрегаты для всех обработанных секций. При применении к необработанным объектам выдает ошибку. Данный режим обработки поддерживается для измерений, групп мер и секций.
Обработка. Данные(ProcessData)
Обрабатывает только данные без построения статистических схем или индексов. Если данные находятся в секциях, они будут сброшены перед повторным заполнением секции исходными данными. Данный режим обработки поддерживается для измерений, кубов, групп мер и секций.

Теперь определившись с вариантом обработки измерений и секций куба, необходимо получить XMLA-скрипты  для постановки планировщика заданий в SSMS по расписанию.
Как это сделать  уже было подробно описано(см. Обновление OLAP-кубов в SQL Server AnalysisServices(SSAS)  по расписанию)
Сейчас рассмотрим аналогичную задачу отличием,  которой будет только то, что задание будет содержать шаги с обработкой измерений и обработкой не всего куба, а только необходимых секций.
Подключитесь к экземпляру служб Analysis Services в среде SQL Server Management Studio (SSMS) ,  раскройте узел «Базы данных», далее раскройте необходимую БД и соответствующие ей «Измерения», щелкните правой кнопкой мыши  по наименованию измерения которое  хотите обрабатывать  и выберите команду «Обработка»(подробно здесь).
В раскрывшемся окне выберите «Параметры обработки»  - Обработка. Обновление (ProcessUpdate)
 С помощью функции «Сценарий» получаем  уже известным методом XMLA-скрипты  всех необходимых измерений.
Аналогично получаем XMLA-скрипты для текущих секций куба с  Параметром обработки - Обработка. Полная(ProcessFull).

Таким же образом получаем XMLA-скрипты для архивных секций куба с  Параметром обработки - Обработка. Индекс (ProcessIndexes).
Далее(уже известным методом) создаем последовательность шагов в расписании и получаем автоматическую обработку куба по расписанию с последовательным выполнением шагов:
1. ProcessUpdate обработка измерений;
2. ProcessFull обработка текущей секции;
3. ProcessIndexes для остальных секций.

Ресурсы, которые использовались при написании статьи:

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

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