Możesz zidentyfikować kosztowne zapytania (i bazy danych, z którymi są powiązane) za pomocą DMV, m.in. z tego artykułu w TechNet :
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;
Będą one informować o ciężkich zapytaniach typu hitter, ale niestety nie wskażą bazy danych, która może mieć bardzo dużą liczbę małych zapytań, które używają małych bitów procesora pojedynczo, ale dużych bitów łącznie. Możesz to zrobić za pomocą tego zapytania z zapytań DMV Glenna Allana Berry'ego :
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);
Żadne z tych zapytań nie identyfikuje aplikacji, która je uruchomiła, a używane DMV nie przechowują tych informacji (musisz przechwycić zapytania w akcie i zanotować nazwę aplikacji w sys.dm_exec_sessions lub przejrzeć ślad).
Oczywiście możesz zautomatyzować tę pracę za pomocą różnych narzędzi wydajnościowych innych firm dostępnych na rynku (zastrzeżenie:pracuję dla jednego z nich, SQL Sentry, który produkuje Doradca ds. wydajności , który wykonuje wszystkie powyższe czynności, w tym śledzi kosztowne zapytania i utrzymuje informacje o tym, w której bazie danych były uruchomione i jaka aplikacja je nazwała).