核心查詢
SELECT TOP 1000
qs.creation_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) AS statement_text,
st.text AS batch_text,
qs.total_worker_time, qs.last_worker_time, qs.max_worker_time, qs.min_worker_time
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
WHERE qs.creation_time BETWEEN '2024-01-01 00:00:00' AND '2024-01-01 23:59:59'
AND st.text LIKE '%關鍵字%'
ORDER BY qs.creation_time DESC;
關鍵 DMV/函數說明
| 物件 | 用途 |
| sys.dm_exec_query_stats | 快取計畫的彙總效能統計 (CPU、I/O、執行次數...) |
| sys.dm_exec_sql_text(sql_handle) | 表值函數,依 sql_handle 回傳完整批次文字 |
| sys.dm_exec_query_plan(plan_handle) | 取得 XML 執行計畫 |
| sys.dm_exec_text_query_plan(plan_handle, start, end) | 取得單一陳述式計畫 |
常見過濾條件
qs.last_execution_time:最近執行時間 (較 creation_time 實用)。
qs.execution_count > 100:高頻查詢。
qs.total_logical_reads > 100000:高邏輯讀查詢。
注意事項
- DMV 內容隨服務重啟、計畫移出快取而消失,非永久稽核。
- 生產環境建議搭配 Query Store (SQL 2016+) 或 Extended Events 持久化。
statement_start_offset/end_offset 以位元組為單位,需除 2 轉字元索引。