Счетчики Windows Performance Monitor (Perfmon) для диагностики SQL Server

Windows Performance Monitor (Perfmon) counters for SQL Server diagnosticsДанный материал является переводом статей MSSQLTips "Joe Gavin : Windows Performance Monitor Counters for SQL Server" и "Joe Gavin : SQL Server Disk Related Performance Monitor Counters".

В данной статье, мы узнаем о том, как получить данные о производительности и интерпретировать результаты некоторых часто используемых счетчиков Windows Performance Monitor (Perfmon), связанных с SQL Server.

В прошлый раз мы смотрели, как создать и запустить Perfmon Data Collector Set для сбора информации о производительности в режиме реального времени. Теперь мы рассмотрим некоторые выходные данные, показатели и значения, на которые следует обращать внимание в контексте решения проблем в работе SQL Server.

Объекты и Счетчики Perfmon

В следующей таблице приведен список объектов Perfmon и счетчиков производительности, которые обычно используются для проверки производительности SQL Server, а также их описания и руководство по ожидаемым значениям.

Perfmon Объект

 Счетчик

Описание Счетчика

Рекомендации

Memory

Available MBytes

Доступные мегабайты — это объем физической памяти в
мегабайтах, доступный для немедленного выделения процессу или для использования системой.

Должно оставаться довольно постоянным и, вероятно, не опускаться ниже 4096 МБ или около того. Может указывать, что "максимальная память сервера" оставлена по умолчанию, приложения, отличные от SQL Server, работают на сервере.

Processor

 

% Processor Time

 

% процессорного времени — это процент истекшего времени, которое процессор (ЦП) тратит на выполнение потока, отличного от простоя.

% процессорного времени будет сильно различаться на активном сервере. Всплески до
100% не редкость, но если оно превышает 70% или около того в течение
какого-либо периода времени, ваши пользователи, вероятно, испытывают проблемы с
производительностью. Причиной может быть отсутствие или промахи индексов в
запрашиваемой таблице.

Physical Disk

Avg. Disk sec/Read

Среднее время в секундах чтения данных с диска

В идеале должен быть менее 15 миллисекунд. Оно не должно превышать 50 миллисекунд.

Physical Disk

Avg. Disk sec/Write

Среднее время в секундах записи данных на диск

В идеале должен быть менее 15 миллисекунд. Оно не должно превышать 50 миллисекунд.

Physical Disk

Disk Reads/sec

Скорость операций чтения на диске

В идеале должен быть менее 15 миллисекунд. Оно не должно превышать 50 миллисекунд.

Physical Disk

Disk Writes/sec

Скорость операций записи на диск

В идеале должен быть менее 15 миллисекунд. Оно не должно превышать 50 миллисекунд.

SQLServer:Access Methods

Forwarded Records/sec

Количество записей, полученных с помощью перенаправленных указателей записей

В идеале близко к 0.

SQLServer:Access Methods

Full scans/sec

Количество неограниченных полных сканирований. Это может быть сканирование базовой таблицы или полное сканирование индекса.

Предпочтительно менее 1.

SQLServer:Access Methods

Page Splits / Sec

Количество разбиений страниц в секунду, возникающих в
результате переполнения страниц индекса.

Должно быть меньше 20% всех Batch Requests/Sec.

SQLServer:Buffer Manage

Buffer Cache hit ratio

Процент страниц, которые были найдены в пуле буферов без чтения с диска

Вы хотели бы, чтобы это значение было постоянным или близким к 100%. Меньше может
указывать на нехватку памяти на сервере или выделенную для
SQL Server.

SQLServer:Buffer Manager

Checkpoint Pages / Sec

Количество страниц, сброшенных контрольной точкой или
другими операциями, требующими сброса всех грязных страниц.

Ориентир для сравнения.

SQLServer:Buffer Manager

Page life expectancy

Количество секунд, в течение которых страница будет оставаться в пуле буферов без ссылок.

Эмпирическое правило: это не должно опускаться ниже 300 миллисекунд.

SQLServer:General Statistics

User Connections

Количество пользователей, подключенных к системе.

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

SQLServer:Locks

Average
Wait Time (ms)

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

В идеале должно быть 0.

SQLServer:Locks

Lock Waits / Sec

Количество запросов на блокировку, которые не могли быть удовлетворены немедленно и требовали от вызывающего объекта ожидания перед предоставлением блокировки.

В идеале должно быть 0.

SQLServer:Memory Manager

Memory
Grants Pending

Текущее количество процессов, ожидающих предоставления памяти рабочей области

В идеале должно быть 0.

SQLServer:Memory Manager

Target Server Memory (KB)

Идеальный объем памяти, который сервер готов потреблять

Соотношение: Общая память сервера (КБ) / память целевого сервера (КБ) должна быть приблизительно равна 1.

SQLServer:Memory Manager

Total Server Memory (KB)

Общий объем динамической памяти, потребляемой сервером в данный момент.

Соотношение: Общая память сервера (КБ) / память целевого сервера (КБ) должна быть
приблизительно равна 1.

SQLServer:SQL Statistics

Batch Requests/Sec

Количество пакетных запросов SQL, полученных сервером

Бенчмарк активности сервера.

SQLServer:SQL Statistics

SQL
Compilations/Sec

Количество компиляций SQL

Должен быть на уровне 10% или меньше от общего Batch Requests/sec.

SQLServer:SQL Statistics

SQL Re-Compilations/Sec

Количество перекомпиляций SQL

Должен быть на уровне 10% или меньше от общего Batch Requests/sec.

 

Просмотр данных о производительности

В консоли Performance Monitor переходим к нашему ранее созданному и запущенному Data Collector Set.

  1. Щелчок ПКМ на Collector Set;
  2. Выбираем пункт меню "Latest Report".

Windows Performance Monitor - Data Collector Sets - Latest Report

Здесь мы видим данные, собранные в определенный день с 11:45 до 12:45. Верхняя часть экрана представляет собой графическое представление каждого счетчика. Прямо под ним находятся значения для выбранного счетчика. А внизу мы можем включит или отключить отображение того или иного счётчика.

Windows Performance Monitor - View Graph and Select Counters

На примере счётчиков работы дисковой подсистемы, представленных ниже, среднее значение чтения с диска в секунду для диска D: составляет 0,048 секунды = 48 миллисекунд. Это приближается к верхнему пределу в 50 миллисекунд и указывает на низкую производительность диска на этом сервере, что требует дальнейшего изучения. Я запускаю это на виртуальной машине с Windows Server 2019, размещенной на ноутбуке, поэтому не ожидаю большой производительности. Если бы это был настоящий сервер, пора было бы обсудить это с командой поддержки системы хранения данных.

Windows Performance Monitor - Disk Drives Counters

Для того, чтобы увидеть более чистое графическое представление мы можем оставить лишь отображение интересующих нас счётчиков. Например, ниже мы сняли все флажки в столбце "Show", кроме "% Processor Time", чтобы показать видеть график только по процессорному времени. Глядя на числа внизу, мы видим, что минимум был 0%, максимум 55,746%, а средний 0,289%. Как видим, около 12:35 был очень короткий всплеск, но в остальном показатель был низким.

Windows Performance Monitor - Processor Time Counter

Для рассмотрения ещё одного примера, давайте  обратимся к таблице Perfmon Object / Counter и увидим, что для того, чтобы выяснить, является ли "SQL Compilations/Sec" и "SQL Re-Compilations/sec" ниже порога, необходимого для получения значения "Batch Requests/sec".

  1. Оставим только три счетчика в запросе;
  2. Щелчок ПКМ в области Counters;
  3. Выберем каждый из трёх счетчиков индивидуально;
  4. Выберем масштаб, который соответствует линии в области экрана в раскрывающемся списке для "Batch Requests/sec" и подходит к "SQL Compilations/Sec" и "SQL Re-Compilations/sec";
  5. Нажмём "OK"

Windows Performance Monitor - Select SQL Server Counters

Глядя на график, мы видим, что "Batch Requests/sec" единственный хорошо видимый счетчик. "SQL Compilations/sec" и "SQL Re-Compilations/sec" едва видны на дне. На глаз это указывает, что они оба значительно ниже порога 10%.

Windows Performance Monitor - SQL Server Batch Requests/sec Counter

Для подтверждения выберите "Average Batch Requests/sec" и это 0.065. 10% от 0.065 будет 0.0065. Выберите "SQL Compilations/Sec" и среднее 0.001. Выберите "SQL Re-Compilations/Sec" и среднее 0.00. Оба этих значения меньше 0.0065, так что в нашем случае работа SQL Server в допустимых рамках.

Windows Performance Monitor - SQL Server Average Batch Requests/secWindows Performance Monitor - SQL Compilations/Sec

Экспорт данных Perfmon в файл CSV

Вы можете предпочесть просматривать и анализировать данные Perfmon в электронной таблице. Perfmon дает нам возможность экспортировать данные в файл формата CSV.

  1. Щелкните ПКМ на любом из счётчиков;
  2. Выберите пункт "Save Data As…".

Perfmon save data as CSV

  1. Выберите каталог сохранения;
  2. Задайте имя файла;
  3. Выберите тип 'Text File (Comma delimited)(.csv)' в выпадающем списке;
  4. Нажмите "Save".

Perfmon save data as CSV dialog

После некоторого форматирования, чтобы сделать его более читабельным, и сохранения в формате .xlsx, данные готовы к дальнейшему анализу в Microsoft Excel.

Perfmon export to Excel

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