Nákladné dotazy (a databáze, se kterými jsou spojeny) můžete identifikovat pomocí DMV, např. z tohoto článku na TechNetu :
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;
Ty vám řeknou o těžkých dotazech typu hitter, ale bohužel neumožní určit databázi, která by mohla mít velmi velký objem malých dotazů, které využívají malé části CPU jednotlivě, ale velké bity dohromady. Můžete to udělat pomocí tohoto dotazu z dotazů DMV Glenna Allana Berryho :
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);
Žádný z těchto dotazů neidentifikuje aplikaci, která je spustila, a použité DMV tyto informace neukládají (byli byste museli zachytit dotazy v aktu a poznamenat si název aplikace v sys.dm_exec_sessions nebo zkontrolovat trasování).
Samozřejmě můžete tuto práci automatizovat pomocí různých výkonových nástrojů třetích stran na trhu (prohlášení:pracuji pro jednoho z nich, SQL Sentry, který vyrábí Poradce pro výkon , která provádí vše výše uvedené, včetně sledování vysoce nákladných dotazů a udržování informací o tom, ve které databázi byly spuštěny a jaká aplikace je nazvala).