Оптимизация MDX-запросов

advertisement
Косяков Иван
Microsoft MVP
Russian BI User Group, PASS Chapter
Архитектура запросов
Диагностика проблемы
Оптимизация измерений
Настройка агрегирования
Использование секций
Оптимизация MDX-запросов
«Разогревание» кэша
Многопользовательский режим
Обработка измерений
MDXзапросы
Обработка
данных
Обработка
индексов и
агрегатов
Архитектура запросов
Диагностика проблемы
Оптимизация измерений
Настройка агрегирования
Использование секций
Оптимизация MDX-запросов
«Разогревание» кэша
Многопользовательский режим
MDX-запрос
клиентского
приложения
Управление сессиями
Менеджер сессий
XML/A приемник
Выполнение запросов
Обработчик запросов
Кэш обработчика запросов
Движок хранения
Кэш движка хранения
Извлечение данных
Запрос
Координирующая работа
Работа 1
Поток
Работа 2
Поток
Поток
…
Работа N
Поток
Свойство CoordinatorExecutionMode:
0 – автоматически, на основе нагрузки и ресурсов
+N – число параллельных работ на сервер
-N – число параллельных работ на процессор
Менеджер сессий
Анализатор запросов
Заполнение координат
Подсчет данных в ячейках
Движок расчетов
Движок формул
Кэш движка формул
Операции со вложенными кубами
Движок хранения
Контекст
запроса
Контекст
сессии
Глобальный
контекст
Менеджер сессий
Обработчик запросов
Запрос к
вложенному кубу
Движок хранения
Данные измерений
Хранилище
атрибутов
Хранилище
иерархий
Кэш движка
хранения
Данные групп мер
Фактические
данные
Агрегаты
Запрос к
вложенному кубу
Координирующая работа
Работа 1-го сегмента
Работа 2-го сегмента
Поток
Поток
…
Работа N-го сегмента
Поток
Архитектура запросов
Диагностика проблемы
Оптимизация измерений
Настройка агрегирования
Использование секций
Оптимизация MDX-запросов
«Разогревание» кэша
Многопользовательский режим
Фиксируем
«точку отсчета»
«Холодный» кэш
движков
«Теплый» кэш
системы
Производим
диагностику
проблемы
Обработчик
запросов
Движок
хранения
Аппаратное
обеспечение
Обработчик
запросов
Движок
хранения
Аппаратные
ресурсы
Оптимизация
MDX-запросов
Оптимизация
измерений
Добавить память
«Разогревание»
кэша
Оптимизация
агрегирования
Добавить
процессоры
Оптимизация
секций
Улучшить I/O или
многопользовательский
режим
Архитектура запросов
Диагностика проблемы
Оптимизация измерений
Настройка агрегирования
Использование секций
Оптимизация MDX-запросов
«Разогревание» кэша
Многопользовательский режим
Если заданы атрибутивные
отношения:
Используются индексы
Эффективно рассчитываются
агрегаты
Натуральные и ненатуральные иерархии
Архитектура запросов
Диагностика проблемы
Оптимизация измерений
Настройка агрегирования
Использование секций
Оптимизация MDX-запросов
«Разогревание» кэша
Многопользовательский режим
Проблема: трассировка показала, что более
60% времени запрашиваются секции
Как обнаружить: отслеживать события Get
Data From Aggregation и Query Subcube
Verbose
Решение проблемы:
Оптимизировать агрегаты, использовать Usage
Based optimization wizard для расчета агрегатов
Совместить с существующими агрегатами или
заменить их
Возможность пересмотра и модификации
настроек использования агрегатов
Имена настроек агрегирования
Full – атрибут будет включен во все агрегации
Unrestricted – атрибут может быть включен в
агрегации
None – ни одна агрегация не может содержать
атрибут
Default
Атрибут «Все» и атрибут уровня ключа
измерения = Unrestricted
Измерения «M2M», не материализованные
измерения и измерения «data mining» = None
Натуральные иерархии = Unrestricted
Статистически не обрабатываемые атрибуты = Full
Все остальные = None
Full
Атрибут почти всегда используется,
Мало элементов
Default
Атрибут часто используется,
Не более 10 атрибутов ‘Unrestricted’
Атрибут редко используется,
участвует в натуральных иерархиях
None
Unrestricted
Просмотр структур агрегирования и агрегатов
Ручное добавление, изменение и удаление агрегатов
Применение структуры агрегирования для другой
секции
Создание новой структуры агрегирования
Объединение с существующей структурой
агрегирования
Архитектура запросов
Диагностика проблемы
Оптимизация измерений
Настройка агрегирования
Использование секций
Оптимизация MDX-запросов
«Разогревание» кэша
Многопользовательский режим
Срезы – секции без данных не запрашиваются
Индивидуальный набор агрегатов для каждой
секции – в зависимости от запросов
Секции упорядочены по колонке «distinct count»
Когда запрашивается результирующее «число различных
объектов», потоки, сканирующие секции, скоординированы по
значению «число различных объектов»
Поэтому потоки на одной секции могут ждать, чтобы их догнали
другие, если «различные» значения перекрываются
Перекрывающиеся
секции
Не перекрывающиеся
секции
Архитектура запросов
Диагностика проблемы
Оптимизация измерений
Настройка агрегирования
Использование секций
Оптимизация MDX-запросов
«Разогревание» кэша
Многопользовательский режим
Анализируйте выражение, если требуется
«вычистить» пустое пространство
Measures.[Sales Amount]
(Measures.[Sales Amount],
Product.[Product Categories].Parent)
/
=
Measures.[Product Contribution]
Известные факты
A = Product.CurrentMember
B = Product.Parent
Только когда A is not NULL, тогда A / B is not NULL
B – всегда константа
Движок хранения запрашивает только непустые данные
Заключение
Выполнять вычисления только тогда, когда значения
числителя возвращаются движком хранения, а
знаменатель – постоянная величина
Шаг 1: Получить определенные (not NULL) значения
Measures.[Sales Amount]
(Measures.[Sales Amount],
Product.[Product Categories].Parent)
Шаг 2: Вычислить выражение
Шаг 3: Добавить значения NULL в результаты запроса
Measures.[Product Contribution]
Блочные вычисления не поддерживаются в сценариях:
Именованные наборы
Aggregate([NamedSet])
Динамические выражения
[Date].[Fiscal].Lag([Measures].[Count])
Операции с динамическими наборами
Filter, NonEmpty, EXISTING, etc.
Рекурсии – обнаружение возможной рекурсии может
возвратить расчет в каждой ячейке
Документация MSDN® по блочным вычислениям
http://msdn.microsoft.com/en-us/library/bb934106.aspx
Оптимизируйте использование IIF
Создавайте отдельный вычисляемый
элемент для повторного использования
Исключайте переменные атрибуты
Используйте NULL для пустых ячеек
В выражении «expr1 * expr2»
разряженное выражение – в левую часть
Можно перенести часть вычислений в
реляционный движок
Архитектура запросов
Диагностика проблемы
Оптимизация измерений
Настройка агрегирования
Использование секций
Оптимизация MDX-запросов
«Разогревание» кэша
Многопользовательский режим
Кэш пустой когда запускается сервер или
обрабатывается секция
«Разогревание» кэша предварительно
загружает типичные запросы
Создайте приложение VB.NET или C#.NET
Используйте ascmd.exe
Добавьте задание со скриптом в пакет
Integration Services
Запустите отчеты Reporting Services
Архитектура запросов
Диагностика проблемы
Оптимизация измерений
Настройка агрегирования
Использование секций
Оптимизация MDX-запросов
«Разогревание» кэша
Многопользовательский режим
Установите настройки
Threadpool\Query\MaxThreads – максимальное
количество рабочих потоков в пуле запросов
Threadpool\Process\MaxThreads – максимальное
количество потоков в пуле обработки
CoordinatorExecutionMode – количество работ на
процессор
Отслеживайте узкие места
количество конкурентных работ и потоков
Подробнее
http://www.microsoft.com/technet/prodtechnol/sql/bestpract
ice/ssasqptb.mspx
Попробуйте использовать NTLFH heap
manager вместо OLAP heap manager
Настройка
По умолчанию
MemoryHeapType
HeapTypeForObjects
1
1
Многопользовательская
2
0
Попробуйте предотвратить блокировку
коротких запросов более длительными
запросами
Настройка
CoordinatorQueryBalancingFactor
CoordinatorQueryBoostPriorityLevel
По
умолчанию
-1
3
Многопользовательс
кая
1
0
Используйте кластер серверов SSAS
(server farm)
Network Load Balancing (NLB) – функция
Windows Server®
База может быть промаркирована как
read-only – если многопользовательская
нагрузка мала на движок хранения, но
велика на обработчик запросов
Статьи
SQL Server 2008 Analysis Services Performance
Guide
http://www.microsoft.com/downloads/details.aspx?familyid=3BE04
88D-E7AA-4078-A050-AE39912D2E43&displaylang=en)
Analysis Services Distinct Count
(http://www.microsoft.com/downloads/details.aspx?FamilyID=65df
6ebf-9d1c-405f-84b1-08f492af52dd&displaylang=en)
Performance Improvements for MDX in SSAS 2008
http://msdn2.microsoft.com/enus/library/bb934106(SQL.100).aspx
Презентации
PASS Community Summit 2008
http://www.softconference.com/pass/slist.asp?C=2057
46
SQL Customer Advisory Team
http://sqlcat.com
SQL Server Web site
http://www.microsoft.com/sqlserver
SQL Server TechCenter
http://technet.microsoft.com/en-us/sqlserver
SQL Server DevCenter
http://msdn.microsoft.com/en-us/sqlserver
Мой блог - http://www.microsoftbi.ru
Для вопросов: mail@kosyakov.info
Russian Business Intelligence
(http://rubi.ineta.ru) – группа
пользователей, отделение PASS
© 2007 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.
The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market
conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation.
MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
Download