Ungefär. Kolla in den här frågan:
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
Detta kommer att få dig frågorna i planens cache i ordningsföljd av hur mycket CPU de har använt. Du kan köra detta regelbundet, som i ett SQL Agent-jobb, och infoga resultaten i en tabell för att se till att data finns kvar efter omstarter.
När du läser resultaten kommer du förmodligen att inse varför vi inte kan koppla dessa data direkt tillbaka till en enskild databas. För det första kan en enskild fråga också dölja sin riktiga databasförälder genom att göra trick som detta:
USE msdb
DECLARE @StringToExecute VARCHAR(1000)
SET @StringToExecute = 'SELECT * FROM AdventureWorks.dbo.ErrorLog'
EXEC @StringToExecute
Frågan skulle köras i MSDB, men den skulle granska resultat från AdventureWorks. Var ska vi tilldela CPU-förbrukningen?
Det blir värre när du:
- Gå mellan flera databaser
- Kör en transaktion i flera databaser, och låsningen sträcker sig över flera databaser
- Kör SQL Agent-jobb i MSDB som "fungerar" i MSDB, men säkerhetskopiera enskilda databaser
Det fortsätter och fortsätter. Det är därför det är vettigt att prestandajustera på frågenivå istället för databasnivå.
I SQL Server 2008R2 introducerade Microsoft prestandahantering och apphanteringsfunktioner som låter oss paketera en enda databas i ett distribuerbart och distribuerbart DAC-paket, och de lovar funktioner som gör det lättare att hantera prestanda för enskilda databaser och deras applikationer. Det gör fortfarande inte det du letar efter.
För fler av dessa, kolla in T-SQL-arkiv på Toad Worlds SQL Server-wiki (tidigare på SQLServerPedia) .
Uppdaterat den 29/1 för att inkludera totala tal istället för bara medelvärden.