Extended Events для SSAS. Часть 2

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

Итак,  часто стоит задача понять почему, тот или иной, запрос стал долго работать. Если для обыкновенного T-SQL запроса у нас с вами есть и план выполнения запроса и различные средства мониторинга, то для SSAS, к сожалению, у нас только есть Extended Events(для DAX запросов есть DAX студия, которая позволит вам также проанализировать ваш запрос, получить план запроса и время выполнения каждой части запроса. Для MDX запросов был замечатльный инструмент MDX студио, для старых версий SSAS он и сейчас есть, для новых, к сожалению, он не работает). Поэтому будем использовать Extended Events. Для анализа нам необходим следующий набор событий:

  • Progress Report Begin/Progress Report End — данное события показывают, что Storage Engine обращается к партициям или агрегатам. Это означает, что этих данных нет в кеше.
  • Query Begin/Query End — Начало и окончание построения запроса. Здесь стоит обратить внимание на  длительность(Duration).
  • Calculate Non Empty Begin/Calculate Non Empty Begin  — данное события показывают, сколько времени требуется на фильтрацию данных(убираем пустые строки). Стоит обратить внимание на длительность.
  • Execute MDX Script Begin/Execute MDX Script End -начало и окончание оценки мдх скрипта в кубе. Очень быстрая операция, при условии, что нет комплексных named set, в этом случае занимает много времени.
  • Get Data From Aggregation — показывает использование агрегатов.
  • Get Data From Cache — показывает использование кеша, в принципе если вы ловите это в своих событиях, то это хороший знак, так как   вычитка данных из кеша для запроса — это очень быстрая операция.
  • Query Cube Begin/Query Cube End —  показывает время начала и окончания продолжительности запроса.
  • Query Dimension — показывает, когда запрос обращается к  членам измерения(возврат членов из иерархии). Всегда должно быть закешировано, если все таки нет, то получаем операции чтения с диска.
  • Query Subcube — возращает набор нулей и единиц(vector of dimensions).Показывает использование  запросом подкубов. Фактически показывает результат Мдх запроса  к данным различных подкубов, запращиваемых из Storage Engine.
  • Query Subcube Verbose — возвращает более детальную информацию Query Subcube.
  • Calculation Evaluation — содержит информацию о внутренних операциях, которые выполняет Formula Engine.
  • Serialize Results Begin/Serialize Result End — показывает возрат данных клиенту.  Если возращается большой объем данных, то данное событие может занять много времени(хотя все зависит от того, какой клиент принимает данные, где находится сервер, какая скорость сети и т.д.)

И так добавляем события в сессию.  В итоге получим вот такой набор событий в сессии:

sessionmdx

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

eventfiles

И запускаем нашу сессию.  Теперь делаем запуск набора mdx запросов или запускаем Excel, который присоеденен к нашему кубу, и строим различные отчеты. Или запускаем один большой запрос, как я и сделал.

В итоге, после того как мы запустили  запросы к кубу, мы можем проанализировать наш файл. Для этого используем следующую T-SQL команду sys.fn_xe_file_target_read_file, которая позволит нам прочитать файл. Запускаем запрос:

SELECT module_guid — id  события
,package_guid — ид пакета
,object_name — имя события
,CAST(event_data AS XML) AS [Event-Data-As-XML]  —содержимое события в XML
,file_offset —  cмещение блока в файле, содержащем событие.

FROM
sys.fn_xe_file_target_read_file(‘F:\LogSF\SSASMDX.xel’,

NULL,

NULL,

NULL)

Получаем следующий  набор данных

tsqlsys

Но из данного набора нам непонятно, что именно происходит с сервером, и основная информация о событиях находится в [Event-Data-As-XML] и она в XML формате.  Можно конечно просмотреть c помощью SSMS,  достаточно открыть файл с помощью пункта меню File-Open-Merge Extended Events Files. В появивщемся окне выбрать все файлы, которые нам необходимы, и нажать ОК.  Но интересней воспользоваться аналитическим инструментом Power BI Desktop.

Запускаем Power BI Desktop.  А теперь по шагам:

  1.  Необходимо получить данные из файла. Для этого выбираем получить данный из SQL запроса, который описан выше. В принципе нам нужен один столбец Event-Data-As-XMLgetdatasql
  2. После чего переходим в Изменить запросы и  столбец  Event-Data-AS-XML преобразовуем в ХMLgetdatasql_4
  3. Теперь преобразованный столбец разворачиваем  и получаем новые поля. Нас интересуют только  DATA и  Attribute:namegetdatasql_5
  4. Фильтруем   таблицу по AttributeName, выбираем Duration и CPUTime, ProgressTotal. Преобразовываем поле data в десятичное и запускаем удаление ошибок, если они есть
  5. В итоге  у нас должна получится вот такая таблица. После чего нажимаем закрыть и применить. И ждем загрузки данных.

getdatasql_8

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

2017-01-22-4

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

P.S. Что почитать:

Как обычно Chris Webb — Analysing SSAS Extended Event Data With Power Query: Part 1

и Monitor Analysis Services with SQL Server Extended Events

Реклама

Автор

Eugene Polonychko

DWH/BI architect, speaker at SQL Saturday conference, member of Ukranian Data Community Kyiv, owner of Donetsk SQL User Group

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

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s