Вроде. Проверьте этот запрос:
SELECT total_worker_time/execution_count AS AvgCPU
, total_worker_time AS TotalCPU
, total_elapsed_time/execution_count AS AvgDuration
, total_elapsed_time AS TotalDuration
, (total_logical_reads+total_physical_reads)/execution_count AS AvgReads
, (total_logical_reads+total_physical_reads) AS TotalReads
, execution_count
, SUBSTRING(st.TEXT, (qs.statement_start_offset/2)+1
, ((CASE qs.statement_end_offset WHEN -1 THEN datalength(st.TEXT)
ELSE qs.statement_end_offset
END - qs.statement_start_offset)/2) + 1) AS txt
, query_plan
FROM sys.dm_exec_query_stats AS qs
cross apply sys.dm_exec_sql_text(qs.sql_handle) AS st
cross apply sys.dm_exec_query_plan (qs.plan_handle) AS qp
ORDER BY 1 DESC
Это даст вам запросы в кэше плана в порядке того, сколько ЦП они израсходовали. Вы можете запускать это периодически, как в задании агента SQL, и вставлять результаты в таблицу, чтобы убедиться, что данные сохраняются после перезагрузок.
Когда вы прочитаете результаты, вы, вероятно, поймете, почему мы не можем сопоставить эти данные непосредственно с отдельной базой данных. Во-первых, один запрос также может скрыть своего истинного родителя базы данных, выполняя такие приемы:
USE msdb
DECLARE @StringToExecute VARCHAR(1000)
SET @StringToExecute = 'SELECT * FROM AdventureWorks.dbo.ErrorLog'
EXEC @StringToExecute
Запрос будет выполнен в MSDB, но он запросит результаты из AdventureWorks. Где мы должны назначить потребление процессора?
Становится хуже, когда ты:
- Объединение нескольких баз данных
- Выполнение транзакции в нескольких базах данных, и блокировка распространяется на несколько баз данных
- Запуск заданий агента SQL в MSDB, которые «работают» в MSDB, но резервное копирование отдельных баз данных
Это продолжается и продолжается. Вот почему имеет смысл настраивать производительность на уровне запросов, а не на уровне базы данных.
В SQL Server 2008R2 Microsoft представила функции управления производительностью и управления приложениями, которые позволят нам упаковать единую базу данных в распространяемый и развертываемый пакет DAC, и они являются многообещающими функциями, облегчающими управление производительностью отдельных баз данных и их Приложения. Тем не менее, он по-прежнему не делает то, что вы ищете.
Для получения более подробной информации, посмотрите репозиторий T-SQL на вики-сайте Toad World по SQL Server (ранее на SQLServerPedia) .
Обновлен на 1/29, чтобы включать общее число вместо просто средних.