Косяков Иван 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 Для вопросов: [email protected] 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.