Published on

December 5, 2020

Как отслеживать счетчики монитора производительности в SQL Server

Проблема:

Довольно часто возникает необходимость получить подробную информацию о счетчиках монитора производительности в SQL Server. Например, определение процессов, потребляющих все ЦП в определенное время, может быть обычным требованием. Удобно перенаправить счетчики монитора производительности в SQL Server, где их легко можно запросить или отобразить в службах отчетов.

Решение:

Следующие шаги объясняют, как выбрать счетчики, собрать данные, загрузить данные в SQL Server и запросить сохраненные данные.

Выбор счетчиков:

Для сбора данных используйте TypePerf, чтобы отобразить список счетчиков монитора производительности на машине, с которой вы хотите собирать данные. Используйте следующий запрос, чтобы получить список всех счетчиков, которые можно использовать на машине:

typeperf -q

Вы можете сохранить весь список в текстовый файл, используя следующую команду:

typeperf -q > counterstxt

Отредактируйте список, чтобы оставить только счетчики, которые вы хотите собирать, и сохраните его как counterstxt.

Сбор данных:

Используйте logman для создания коллекции. Запустите сбор данных с помощью следующей команды:

logman MyCollection start

Остановите сбор данных, как только вы собрали представительную выборку:

logman MyCollection stop

По умолчанию счетчики монитора производительности будут сохранены в %systemdrive%\PerfLogs\Admin и будут названы именем вашей коллекции.

Загрузка в SQL Server:

Используйте relog, чтобы перенести собранные счетчики производительности в SQL Server. Сначала выберите базу данных, в которую вы хотите их перенести, и создайте системный DSN для этой базы данных SQL Server. Используйте аутентификацию Windows для упрощения. Перенесите счетчики в вашу базу данных SQL Server с помощью следующей команды:

relog MyCollection.blg -f SQL -o SQL:relog!ServerName

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

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

  • DisplayToID – таблица, содержащая информацию о вашей коллекции
  • CounterDetails – содержит подробности о ваших счетчиках производительности
  • CounterData – содержит фактические данные счетчиков

Вот пример запроса, иллюстрирующего, как получить доступ к данным счетчиков производительности:

SELECT MachineName,
   CONVERT(DATETIME, CONVERT(VARCHAR(16), CounterDateTime)) as [Date],
   AVG(CounterValue) as Average,
   MIN(CounterValue) as Minimum,
   MAX(CounterValue) as Maximum
FROM CounterDetails
   JOIN CounterData ON CounterData.CounterID = CounterDetails.CounterID
   JOIN DisplayToID ON DisplayToID.GUID = CounterData.GUID
WHERE CounterName = 'Context Switches/sec'
GROUP BY MachineName,
   CONVERT(DATETIME, CONVERT(VARCHAR(16), CounterDateTime))

Пример набора результатов:

(Примечание: пропуск во времени происходит потому что…)

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.