Производительность запросов в SSAS 2008 Косяков Иван Microsoft MVP Russian BI User Group, PASS Chapter
Содержание Архитектура запросов Диагностика проблемы Оптимизация измерений Настройка агрегирования Использование секций Оптимизация MDX-запросов «Разогревание» кэша Многопользовательский режим
Возможные проблемы быстродействия
Содержание Архитектура запросов Диагностика проблемы Оптимизация измерений Настройка агрегирования Использование секций Оптимизация MDX-запросов «Разогревание» кэша Многопользовательский режим
Архитектура запросов
Управление сессиями Свойство CoordinatorExecutionMode: 0 – автоматически, на основе нагрузки и ресурсов +N – число параллельных работ на сервер -N – число параллельных работ на процессор
Выполнение запросов
Извлечение данных
Извлечение данных
Содержание Архитектура запросов Диагностика проблемы Оптимизация измерений Настройка агрегирования Использование секций Оптимизация MDX-запросов «Разогревание» кэша Многопользовательский режим
Перед началом оптимизации Фиксируем «точку отсчета» - «Холодный» кэш движков
- «Теплый» кэш системы
Производим диагностику проблемы
Использование профайлера
Оптимизация обработки запросов
Содержание Архитектура запросов Диагностика проблемы Оптимизация измерений Настройка агрегирования Использование секций Оптимизация MDX-запросов «Разогревание» кэша Многопользовательский режим
Задание атрибутивных отношений Если заданы атрибутивные отношения: Используются индексы Эффективно рассчитываются агрегаты
Эффективное использование иерархий Натуральные и ненатуральные иерархии
Оптимизация измерений
Содержание Архитектура запросов Диагностика проблемы Оптимизация измерений Настройка агрегирования Использование секций Оптимизация MDX-запросов «Разогревание» кэша Многопользовательский режим
Агрегирование Проблема: трассировка показала, что более 60% времени запрашиваются секции Как обнаружить: отслеживать события Get Data From Aggregation и Query Subcube Verbose Решение проблемы: - Оптимизировать агрегаты, использовать Usage Based optimization wizard для расчета агрегатов
- Совместить с существующими агрегатами или заменить их
Aggregation Design Wizard Возможность пересмотра и модификации настроек использования агрегатов Имена настроек агрегирования
Свойство AggregationUsage Full – атрибут будет включен во все агрегации Unrestricted – атрибут может быть включен в агрегации None – ни одна агрегация не может содержать атрибут Default - Атрибут «Все» и атрибут уровня ключа измерения = Unrestricted
- Измерения «M2M», не материализованные измерения и измерения «data mining» = None
- Натуральные иерархии = Unrestricted
- Статистически не обрабатываемые атрибуты = Full
- Все остальные = None
Рекомендации по использованию свойства Aggregation Usage
Aggregation Designer Просмотр структур агрегирования и агрегатов Ручное добавление, изменение и удаление агрегатов Применение структуры агрегирования для другой секции
Usage-Based Optimization Wizard Создание новой структуры агрегирования Объединение с существующей структурой агрегирования
Оптимизация агрегирования
Содержание Архитектура запросов Диагностика проблемы Оптимизация измерений Настройка агрегирования Использование секций Оптимизация MDX-запросов «Разогревание» кэша Многопользовательский режим
Преимущества секционирования Срезы – секции без данных не запрашиваются Индивидуальный набор агрегатов для каждой секции – в зависимости от запросов
Distinct Count и структура секций Секции упорядочены по колонке «distinct count» Когда запрашивается результирующее «число различных объектов», потоки, сканирующие секции, скоординированы по значению «число различных объектов» Поэтому потоки на одной секции могут ждать, чтобы их догнали другие, если «различные» значения перекрываются
Использование секций
Содержание Архитектура запросов Диагностика проблемы Оптимизация измерений Настройка агрегирования Использование секций Оптимизация MDX-запросов «Разогревание» кэша Многопользовательский режим
Иллюстрация блочных вычислений Анализируйте выражение, если требуется «вычистить» пустое пространство
Расчет в каждой ячейке
Логика блочных вычислений Известные факты - A = Product.CurrentMember
- B = Product.Parent
- Только когда A is not NULL, тогда A / B is not NULL
- B – всегда константа
- Движок хранения запрашивает только непустые данные
Заключение - Выполнять вычисления только тогда, когда значения числителя возвращаются движком хранения, а знаменатель – постоянная величина
Блочные вычисления (SSAS 2008)
Блочные вычисления – SSAS 2008 Блочные вычисления не поддерживаются в сценариях: - Именованные наборы
- Aggregate([NamedSet])
- Динамические выражения
- [Date].[Fiscal].Lag([Measures].[Count])
- Операции с динамическими наборами
- Filter, NonEmpty, EXISTING, etc.
- Рекурсии – обнаружение возможной рекурсии может возвратить расчет в каждой ячейке
Документация MSDN® по блочным вычислениям
Некоторые советы Оптимизируйте использование IIF Создавайте отдельный вычисляемый элемент для повторного использования Исключайте переменные атрибуты Используйте NULL для пустых ячеек В выражении «expr1 * expr2» разряженное выражение – в левую часть Можно перенести часть вычислений в реляционный движок
Оптимизация MDX-запросов
Содержание Архитектура запросов Диагностика проблемы Оптимизация измерений Настройка агрегирования Использование секций Оптимизация MDX-запросов «Разогревание» кэша Многопользовательский режим
«Разогревание» кэша Кэш пустой когда запускается сервер или обрабатывается секция «Разогревание» кэша предварительно загружает типичные запросы - Создайте приложение VB.NET или C#.NET
- Используйте ascmd.exe
- Добавьте задание со скриптом в пакет Integration Services
- Запустите отчеты Reporting Services
Содержание Архитектура запросов Диагностика проблемы Оптимизация измерений Настройка агрегирования Использование секций Оптимизация MDX-запросов «Разогревание» кэша Многопользовательский режим
Повышение параллелизма при выполнении запросов Установите настройки - Threadpool\Query\MaxThreads – максимальное количество рабочих потоков в пуле запросов
- Threadpool\Process\MaxThreads – максимальное количество потоков в пуле обработки
- CoordinatorExecutionMode – количество работ на процессор
Отслеживайте узкие места - количество конкурентных работ и потоков
Тип использования памяти Попробуйте использовать NTLFH heap manager вместо OLAP heap manager
Блокировка длительных запросов Попробуйте предотвратить блокировку коротких запросов более длительными запросами
Балансировка сети и базы read-only Используйте кластер серверов SSAS (server farm) - Network Load Balancing (NLB) – функция Windows Server®
База может быть промаркирована как read-only – если многопользовательская нагрузка мала на движок хранения, но велика на обработчик запросов
Статьи
Порталы
Вопросы? Для вопросов: mail@kosyakov.info Russian Business Intelligence (http://rubi.ineta.ru) – группа пользователей, отделение PASS
|