Du kan identificere dyre forespørgsler (og de databaser, de er tilknyttet) ved hjælp af DMV'erne, f.eks. fra denne TechNet-artikel :
SELECT TOP 50
[Average CPU used] = total_worker_time / qs.execution_count,
[Total CPU used] = total_worker_time,
[Execution count] = qs.execution_count,
[Individual Query] = SUBSTRING (qt.text,qs.statement_start_offset/2,
(CASE WHEN qs.statement_end_offset = -1
THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2
ELSE qs.statement_end_offset END -
qs.statement_start_offset)/2)
,[Parent Query] = qt.text
,DatabaseName = DB_NAME(qt.dbid)
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as qt
ORDER BY [Average CPU used] DESC;
Disse vil fortælle dig om heavy hitter-forespørgsler, men de vil desværre ikke lokalisere en database, der kan have meget store mængder af små forespørgsler, der bruger små stykker CPU individuelt, men store stykker samlet. Du kan gøre det med denne forespørgsel fra Glenn Allan Berrys DMV-forespørgsler :
WITH DB_CPU_Stats
AS
(SELECT DatabaseID, DB_Name(DatabaseID) AS [DatabaseName],
SUM(total_worker_time) AS [CPU_Time_Ms]
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY (SELECT CONVERT(int, value) AS [DatabaseID]
FROM sys.dm_exec_plan_attributes(qs.plan_handle)
WHERE attribute = N'dbid') AS F_DB
GROUP BY DatabaseID)
SELECT ROW_NUMBER() OVER(ORDER BY [CPU_Time_Ms] DESC) AS [row_num],
DatabaseName, [CPU_Time_Ms],
CAST([CPU_Time_Ms] * 1.0 / SUM([CPU_Time_Ms])
OVER() * 100.0 AS DECIMAL(5, 2)) AS [CPUPercent]
FROM DB_CPU_Stats
WHERE DatabaseID > 4 -- system databases
AND DatabaseID <> 32767 -- ResourceDB
ORDER BY row_num OPTION (RECOMPILE);
Ingen af disse forespørgsler identificerer den applikation, der kørte dem, og de anvendte DMV'er gemmer ikke disse oplysninger (du skal fange forespørgslerne i færd med at notere programmets navn i sys.dm_exec_sessions eller gennemgå et spor).
Selvfølgelig kan du automatisere dette arbejde med en række 3. parts ydeevneværktøjer på markedet (disclaimer:Jeg arbejder for en af dem, SQL Sentry, som producerer Performance Advisor , som gør alt ovenstående, herunder at holde styr på dyre forespørgsler og vedligeholde oplysningerne om, hvilken database de kørte i, og hvilken applikation kaldte dem).