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

SQL Server 2012 擴展事件 實戰進階:Workload 捕獲與事件檔案分析 (下)

     編輯:關於SqlServer

承上篇建立 blogtest 擴展事件會話 (捕獲 sql_statement_starting/completed,Predicate 限定 database_name = 'Northwind'),本文示範啟動會話、執行負載腳本、分析事件檔案。

會話屬性檢查

  • 確認事件 sql_statement_starting、sql_statement_completed 的 Predicate 皆為 sqlserver.database_name = N'Northwind'。
  • 目標:event_file (檔案路徑 C:\XE\blogtest.xel),max_file_size=50MB, max_rollover_files=10。
會話屬性視窗 事件 Predicate 設定 完成事件 Predicate

執行負載腳本

  • 下載 instnwnd.sql (含 Northwind 建表、插入、查詢混合負載)。
  • SSMS 開啟並執行 (約數分鐘)。
負載腳本執行中

啟動會話並捕獲

  1. Object Explorer → Management → Extended Events → Sessions → blogtest 右鍵 Start Session。
  2. 執行 instnwnd.sql。
  3. 會話狀態顯示 Running,事件計數器遞增。
啟動會話 執行負載腳本

事件檔案分析 (SSMS 內建檢視器)

  1. 會話右鍵 → View Target Data。
  2. 顯示網格:event_name, timestamp, sql_text, duration, cpu_time, reads, writes, row_count。
  3. 可依 duration 排序找出慢查詢,複製 sql_text 進一步調優。
  4. 匯出至 Excel / CSV 做長期趨勢分析。

進階:使用 T-SQL 讀取事件檔案

SELECT
    xe.event_data.value('(event/@name)[1]', 'NVARCHAR(100)') AS event_name,
    xe.event_data.value('(event/@timestamp)[1]', 'DATETIME2') AS timestamp,
    xe.event_data.value('(event/data[@name="sql_text"]/value)[1]', 'NVARCHAR(MAX)') AS sql_text,
    xe.event_data.value('(event/data[@name="duration"]/value)[1]', 'BIGINT') / 1000.0 AS duration_ms
FROM (
    SELECT CAST(event_data AS XML) AS event_data
    FROM sys.fn_xe_file_target_read_file('C:\XE\blogtest*.xel', NULL, NULL, NULL)
) xe
WHERE xe.event_data.value('(event/@name)[1]', 'NVARCHAR(100)') = 'sql_statement_completed'
ORDER BY duration_ms DESC;

最佳實務建議

  • Predicate 盡可能精確:限定 database、username、duration > 閾值,減少事件量與 overhead。
  • 避免捕獲 sql_text 過大:可設定 max_sql_text_length (SQL 2014+)。
  • 生產環境:建立專用 XE 會話 (如 LongRunningQueries, DeadlockCapture),設定為服務啟動自動開始,定期封存 .xel 檔案。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved