Im Artikel Dynamic Management Views and Functions" auf databasejournal.com fand ich folgende sehr nützlich Abfrage zur Ermittlung der durchschnittlichen CPU-Zeit der 5 längsten Abfragen:
SELECT TOP 5 total_worker_time/execution_count 'Avg CPU Time',
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)statement_text
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
ORDER BY total_worker_time/execution_count DESC;
Risiken und Nebenwirkungen: In den "Dynamic-Management-Views" sind nur die Infos seit dem letzten Start des Dienstes enthalten…
PS: Wer wissen will, was aktuell gerade läuft, findet die Antwort mit folgender Abfrage von Urs Gehrig:
SELECT sp.spid [SPID], sp.last_batch [Executed at], st.text [SQL]
FROM sys.sysprocesses sp
OUTER APPLY fn_get_sql(sp.sql_handle) st
WHERE st.text IS NOT NULL