Администрирование
20
Июн
0

Performance Analyzer

Performance Analyzer – это комплексный инструментов предназначенных для анализа вопросов производительности связанных с продуктами Microsoft Dynamics.В данный момент Performance Analyzer позволяет находить проблемы в:

  • Конфигурации SQL сервера;
  • Схеме базы данных (индексы);
  • Коде приложения (ограниченно);
  • Конфигурации приложения;
  • Плохо выполняющихся SQL-запросах.

Например, CRM при создании кастомных полей/объектов не оптимизирует индексы под них. И если данные поля/объекты используются в тяжелых и длительных запросах, то Performance Analyzer поможет Вам идентифицировать их и соответствующим образом оптимизировать их.

Performance Analyzer агрегирует различную информацию о сервере баз данных и сервере приложений. Эту информацию получают ряд коллекторов, которые собирают статистические данные запросов, планы запросов, статистику индексов, конфигурацию базы данных, журналы событий, информацию о блокировках и взаимных блокировках.
Performance Analyzer поставляется в виде файла решения SQL Server Management Studio и включает в себя набор SQL заданий, VB скриптов и счетчиков производительности и т.д. Центральным хранилищем собранной информации в Performance Analyzer является база данных DynamicsPerf. Помимо этого, в решение входит набор демонстрационных SQL скриптов и SSRS отчетов, которые могут быть использованы для получения и анализа данных из БД DynamicsPerf: помогут Вам исследовать конфигурацию SQL сервера, идентифицировать тяжелые запросы, исследовать индексы и блокировки и т.д.

Примечание: в настоящий момент инструмент преимущественно заточен под Dynamics AX, но может также использоваться для MS CRM (и других продуктов – GP, NAV, SL), т.к. имеет базовый функционал, подходящий для большинства продуктов Dynamics.

Предварительная настройка

  • Скачайте Performance Analyzer (локальное зеркало) и распакуйте архив;
  • Создайте на машине где установлен SQL сервере две папки:
    • o Одну для хранения файлов трассировки SQL (C:\SQLTrace);
    • o Вторую для логов счетчиков производительности (С:\PerfLogs).
  • Откройте в SQL Server Management Studio файл проекта Performance Analyzer 1.20 for Microsoft Dynamics из скаченного архива. Проект разделен на несколько разделов:
    • Запросы для настройки БД;
    • Примеры запросов для анализа данных;
    • Примеры обслуживающих скриптов.
  • Сначала нужно создать отдельную БД: в Solution Explorer откройте файл DynamicsPerf\1-Create_Core_Objects.sql и жмите Execute. В результате создастся новая БД DynamicsPerf с кучей таблиц (с префиксами BLOCKED, COLLECTION, DYN, INDEX, PERF, QUERY, SERVER, SQL и т.д.) и SQL Agent Jobs (с префиксами DYNPERF);


Сбор данных

Далее нужно настроить Performance Analyzer на сбор данных на постоянной основе (в основном ежедневной), чтобы в случае возникновения проблем с производительностью Вы смогли быстро определить узкие места, а также сравнить собранные данные между собой.

Этим занимаются три коллектора:

  • Первый в списке – сборщик данных о производительности (Capture Performance Data):
    • Откройте на редактирование SQL Server Agent > Jobs > DYNPREF_Capture_Stats;
    • На странице Steps выберите первый шаг (sp_capturestats) и нажмите кнопку Edit. В Переменной DATABASE_NAME укажите название базы данных организации CRM, которую необходимо проанализировать;
    • На странице Schedules выберите Daily и нажмите кнопку Edit. Задайте время запуска задания.



  • Далее настроим задание ежедневно собирающие информацию о блокировках и взаимных блокировках через трассировку SQL событий (Capture Database Blocking):
    • Откройте на редактирование SQL Server Agent > Jobs > DYNPREF_Default_Trace_Start;
    • На странице Steps выберите первый шаг (Start Tracing) и нажмите кнопку Edit;
    • В поле Command задайте для переменной @FILE_PATH путь к созданной ранее папке для файлов трассировки (в данном примере это C:\SQLTrace);
    • На странице General поставьте галку Enabled (чтобы включить задание);
    • На странице Schedule для варианта Daily укажите время выполнения задания.



  • Осталось настроить работу счетчиков производительности (в Performance Monitor), которые будут ежечасно логировать информацию о работе диска, процессора, памяти и т.д. (Capture Performance Counter Data):
    • Через командную строку запустите Performance Monitor (команада perfmon);
    • Раскройте узел Data Collector Sets, щелкните правой кнопкой мыши по User Defined и выберите New > Data Collector Set;
    • Назовите его CRM SQL Server Performance и выберите Create from a Template и жмите Next;
    • Выберите System Performance и щелкните Browse – укажите путь DynamicsPerf1.20 RC0\DynamicsPerf\Windows Perfmon Scripts\Server2008_SQL_Default_Instance.xml (в данном случае используется инстанс по умолчанию) и жмите Finish.
      Примечание: В случае если у Вас именованный инстанс, то нужно выбрать файл Server2008_SQL_Named_Instance.xml, предварительно отредактировав его и внеся имя инстанса в переменную MSSQL$InstanceName;
    • Щелкните правой кнопкой мыши по CRM SQL Server Performance и откройте его свойства;
    • На вкладке Directory укажите путь к папке C:\PerfLogs (в ней будут хранится лог-файлы счетчиков производительности);
    • Теперь нужно задать время сбора данных со счетчиков: на вкладке Schedule нажмите Add – выберите в качестве даты начала сегодняшнюю дату, остальные опции оставьте по умолчанию;
    • Запустите CRM SQL Server Performance.

З.Ы. Чтобы убедится, что задания работают можно посмотреть на историю их выполнения.




Это основные действия по сбору данных. Помимо них Вам могут понадобится еще некоторые…

Ручной сбор данных о производительности

Если Вам необходимо получить статистику производительности на текущий момент Вы можете собрать ее «вручную» (не дожидаясь выполнения запланированных заданий):

Для этого:

  • Откройте запрос DynamicsPerf — Analysis Scripts\Manual-CaptureStats.sql;
  • Подставьте в переменную @DATABASE_NAME название базы данных организации CRM;
  • Запустите сценарий в отношении базы данных DynamicsPerf.


Ручной сбор данных о блокировках

Эта опция предназначена для случаев, когда Вы не можете по тем или иным причинам выполнить SQL трассировку. Данный процесс хорошо работает для краткосрочных отслеживаний блокировок (до 1 часа), или в случаях, когда вы точно знаете блокировки имеются в текущий момент. Поскольку он дает сильную нагрузку на SQL Server. И чем больше блокировок в текущий момент – тем сильнее нагрузка. Соответственно, данный процесс не должен выполнятся в течении длительного времени.

Для ручного сбора информации по блокировкам:

  • Щелкните правой кнопкой мыши по заданию DYNPERF_Optional_Polling_for_Blocking и нажмите Start Job at Step…
  • Когда закончите сбор данных также щелкните правой кнопкой мыши по DYNPERF_Optional_Polling_for_Blocking и нажимте Stop job.

Данное задание записывает все найденные блокировки в таблицу Blocks в БД DynamicsPerf.


Ежечасный сбор данных

Если Вы наблюдаете изменение (ухудшение) производительности в течении рабочего дня будет полезно настроить ежечасный сбор данных со счетчиков производительности. Для этого:

  • Откройте задание SQL Server Agent > Jobs > DYNPREF_Perfstats_Hourly;
  • Выберите страницу Steps — шаг 1 (CaptureStats) и нажмите Edit;
  • Подставьте в переменную @Database название базы данных организации CRM.


Удаление ненужных данных

Чтобы собранные данные на забили весь диск самые старые из них необходимо удалять. Для этого предусмотрено два SQL задания, которые производят периодическую очистку ненужных данных:

  • DYNPERF_Capture_Stats_Purge – ежедневно удаляет любые данные старше 14 дней (в настройках шага можно отрегулировать количество дней) за исключением последнего собранного пакета;
  • DYNPERF_Purge_Blocks – ежедневно в 04:00 удаляет любые данные, заведенные заданием DYNPERF_Optional_Polling_for_Blocking.

Несколько баз данных

Если у Вас используется несколько организаций в одном развёртывании, то Вам может понадобься собрать статистику со всех них. Для этого:

  • Замените в задании DYNPERF_Capture_Stats в единственном шаге SQL запрос на следующий:
    USE DynamicsPerf
    EXEC SP_CAPTURESTATS @DATABASE_NAME = NULL
  • Вставьте строку с именем БД, для которой нужно собираться статистику в таблицу DATABSES_2_COLLECT (в БД DynamicsPerf).

З.Ы. По умолчанию эта таблица заполняется всеми БД Dynamics во время установки.

Анализ данных

Далее наступает самая важная и полезная часть – фактический анализ полученных данных. Поэтому хорошие навыки в администрировании SQL Server’а будут весьма полезны.
В SQL проект входит набор готовых сценариев, посредством которых Вы можете получить аналитическую информацию. Каждый скрипт содержит несколько запросов. Вы можете выплнить все их сразу нажав Execute, либо выделив конкретный и нажав Execute.

Вот эти скрипты:

  • 3-Analyze_SQL_Configuration.sql: выводит кучу информации о состоянии и настройках SQL сервера;
  • 4-Analyze_SQL_Indexes.sql: полный набор данных о текущих индексах SQL сервера;
  • 5-Analyze_SQL_Queries.sql: позволяет получить информацию о выполнявшихся запросах (наиболее тяжелые или запросы без индексов и т.д.);
  • 6-Analyze_Blocking.sql: выводит информацию по зарегистрированным блокировкам;
  • Manual — Tracing.sql: выводит информацию из собранных трассировок (о блокировках);
  • Quick activity monitor: выводит все выполняющиеся в настоящее время SQL-операторы, все текущие блокировки и открытые курсоры базы данных, которые выполнялись последнюю минуту;
  • Research Queries.sql: позволяет комментировать найденные запросы для их последующей обработки (например для создания в их отношении индекса). Запросы с комментариями не удаляются заданиями на очистку данных.


Помимо вышеперечисленных скриптов в Performance Analyzer имеются два специальных сценария…

Базовая линия

Одна из проблем при анализе технических показателей – то, что мы видим – хорошо это или плохо. Ответ на этот Вопрос позволяет дать Базовая линия. Базовая линия это некое «эталонное» состояние системы, оформленное в виде числовых показателей. Сформировав Базовую линию, мы сможем в последующем производить объективное сравнение Базовой линии и показателей периодических (ежедневных, ежечасных) срезов данных производительности – стало хуже или лучше.

Для создания Базовой линии необходимо вручную запустить SQL задание DYNPERF_Capture_Stats_Baseline. Первую Базовую линию нужно создавать, когда большинство Ваших типовых операций уже устоялись и система ведет себя более-менее стабильно. В следующий (и каждый последующий) раз Базовую линию нужно создавать перед накаткой каких-либо значительных изменений в системе или изменении железа.

Примечание: данные собрание для Базовой линии помечаются специальным префиксом (BASE) и не удаляются заданиями по очистке данных.

После этого в скрипте 7-Baseline-Benchmark Queries есть ряд демонстрационных запросов, которые помогут Вам в анализе. Три основных запроса показывают:

  • Запросы, работающие медленнее, чем Базовая линия;
  • Запросы, работающие быстрее, чем Базовая линия;
  • Запросы, не учтенные в Базовой линии (т.е. новые).


Анализ тестовой среды

Чтобы не допустить перенос плохого кода на продуктивную среду, иногда полезно производить анализ производительности внесенных изменений на тестовой и/или разработческой среде.

Специально для этих целей разработан сценарий CaptureStats in TEST.sql (из раздела DynamicsPerf — Analysis Scripts). Работа с ним состоит из следующих нескольких шагов, часть которых Вам придется выполнить ручками:

  1. Удаление старые данные из DynamicsPerf;
  2. Очистка кэша планов;
  3. (Вручную) запуск тестовых сценариев (на самом CRM) для имитации работы внесенных изменений;
  4. Сбор данных;
  5. Анализ данных (самостоятельно).


Отчеты

Вместе с Performance Analyzer поставляется ряд готовых отчетов Reporting Services, которые Вы можете запустить либо из VS/Report Builder, либо развернуты на сервере SSRS (в Reports):

  • Configuration-Server Configuration: показывает настройки БД и SQL Server’а в целом;
  • Documentation – Long Running Queries: Показывает список долго выполняющихся запросов.
  • General Query Analysis – Query Analysis: предназначен для разрешения проблем производительности выполняющихся запросов;
  • Monitoring-Hourly Disk I/O: обеспечивает подробный (почасовой) анализ работы дисков, которые содержат файлы базы данных;
  • Monitoring-Row Count Statistics (Daily/Hourly/Hourly Detail): позволяет подробно исследовать транзакции выполняющиеся относительно Вашей системы;
  • Monitoring-Row Count Comparison (Sub): подробный отчет, показывающий различия в наборах транзакций между различными срезами, собранными в базе данных DynamicsPerf;
  • Query Analysis (Various levels): подробный отчет для исследования запросов имеющих низкую производительность;
  • Scan Analysis (Index Statistics, Table Properties, User Scan Analysis): набор отчетов для исследования запросов таблиц сканирования БД Microsoft Dynamics;


Комментарии (0)

*

code