Проблема:
Довольно часто возникает необходимость получить подробную информацию о счетчиках монитора производительности в 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))Пример набора результатов:
(Примечание: пропуск во времени происходит потому что…)