sys.dm_exec_query_stats + sys.dm_exec_sql_textSELECT
qs.creation_time AS N'語句編譯時間',
qs.last_execution_time AS N'上次執行時間',
qs.total_physical_reads AS N'物理讀取總次數',
qs.total_logical_reads / qs.execution_count AS N'每次邏輯讀次數',
qs.total_logical_reads AS N'邏輯讀取總次數',
qs.total_logical_writes AS N'邏輯寫入總次數',
qs.execution_count AS N'執行次數',
qs.total_worker_time / 1000 AS N'所用CPU總時間(ms)',
qs.total_elapsed_time / 1000 AS N'總花費時間(ms)',
(qs.total_elapsed_time / qs.execution_count) / 1000 AS N'平均時間(ms)',
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 N'執行語句'
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
WHERE 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
) NOT LIKE '%fetch%'
ORDER BY qs.total_elapsed_time / qs.execution_count DESC;
| 排序依據 | 適合找出 | 說明 |
|---|---|---|
total_worker_time DESC | 高 CPU 查詢 | 累積 CPU 時間最長,可能為計算密集型或計畫不佳 |
total_logical_reads DESC | 高 I/O 查詢 | 邏輯讀最多,通常缺索引或掃描過大範圍 |
total_elapsed_time / execution_count DESC | 單次最慢查詢 | 平均耗時最久,使用者體感最差 |
execution_count DESC | 高頻查詢 | 執行次數最多,微優化效益最大 |
SELECT
qs.*,
DB_NAME(st.dbid) AS DatabaseName,
OBJECT_NAME(st.objectid, st.dbid) AS ObjectName,
qp.query_plan
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
ORDER BY qs.total_worker_time DESC;
query_plan 欄位為 XML,點擊可在 SSMS 直接開啟圖形化執行計畫。
sys.dm_exec_cached_plans 可進一步分析計畫重用率。