首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> SQL Server 2005

SQL Server 查詢歷史執行記錄:善用 sys.dm_exec_query_stats 與 CROSS APPLY

     編輯:SQL Server 2005

核心查詢

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 轉字元索引。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved