標籤:擴充事件 xevent extented events
SQL Server擴充事件(Extended Events)—使用system_health擴充事件會話
system_health 會話是 SQL Server 預設包含的擴充事件會話。 該會話在 SQL Server 資料庫引擎啟動時自動啟動,並且運行時不會對效能造成任何明顯影響。 該會話收集的系統資料可用於協助對資料庫引擎的效能問題進行故障排除。 因此,我們建議您不要停止或刪除該會話。
此會話源自產品支援小組的想法,它可以跟蹤通常被用來對客戶系統進行調試的資訊(例如當客戶系統發生死結或出現其它嚴重錯誤時)。此會話的建立和啟動是 SQL Server執行個體安裝過程的一部分,它在環緩衝區中跟蹤事件,因此不會消耗太多記憶體。
該會話收集的資訊包括:
l 發生嚴重性 >=20 的錯誤的任何會話的 sql_text 和 session_id。
l 發生與記憶體有關的錯誤的任何會話的 sql_text 和 session_id。 這些錯誤包括 17803、701、802、8645、8651、8657 和 8902。
l 任何無法完成的排程器問題的記錄。 (這些問題在 SQL Server 錯誤記錄檔中顯示為錯誤 17883。)
l 檢測到的任何死結。
l 等待閂鎖(或其他相關資源)的時間 > 15 秒的任何會話的 callstack、sql_text 和 session_id 。
l 等待鎖的時間 > 30 秒的任何會話的 callstack、sql_text 和 session_id 。
l 已長時間等待以獲得搶先等待的任何會話的 callstack、sql_text 和 session_id。 期間因等待類型而異。 在搶先等待中,SQL Server 等待的是外部 API 呼叫。
l CLR 分配失敗和虛擬分配失敗的呼叫堆疊和 session_id。
l 有關記憶體 Broker、排程器監視、記憶體節點 OOM、安全性和串連的 ring_buffer 事件。
l sp_server_diagnostics 中的系統組件結果。
l scheduler_monitor_system_health_ring_buffer_recorded 收集的執行個體健全狀態。
l CLR 分配失敗。
l 使用 connectivity_ring_buffer_recorded 時的串連錯誤。
l 使用 security_error_ring_buffer_recorded 時的安全錯誤。
查看會話定義
下面顯示預設事件會話system_health的定義:
SELECT name,event_retention_mode_desc AS event_retention_mode,max_dispatch_latency,max_memory,max_event_size,memory_partition_mode_desc AS memory_partition_mode,track_causality,startup_stateFROM sys.server_event_sessionsWHERE name = ‘system_health‘;
下面顯示事件、謂詞和動作:
SELECT package, e.name, predicate,(SELECT package + ‘.‘ + name + ‘, ‘FROM sys.server_event_session_actions aWHERE a.event_session_id = e.event_session_idAND a.event_id = e.event_idORDER BY package, nameFOR XML PATH(‘‘)) AS ActionsFROM sys.server_event_session_events eINNER JOIN sys.server_event_sessions es ON e.event_session_id = es.event_session_idWHERE es.name = ‘system_health‘;
下面顯示目標及其選項:
SELECT package, t.name,(SELECT name + ‘=‘ + cast(value AS varchar) + ‘, ‘FROM sys.server_event_session_fields fWHERE f.event_session_id = t.event_session_idAND f.object_id = t.target_idFOR XML PATH(‘‘)) AS optionsFROM sys.server_event_session_targets tINNER JOIN sys.server_event_sessions es ON t.event_session_id = es.event_session_idWHERE es.name = ‘system_health‘;
查看會話資料
當事件會話建立並運行,資料收集在目標用於後續使用。除了檔案目標(event_file),從sys.dm_xe_session_targets視圖中可以查詢到所有的目標資料,需要讀取資料通過sys.fn_xe_file_target_read_file()資料表值函式。從sys.dm_xe_session_targets轉換target_data列為XML格式。
您可以使用下列代碼來查看環緩衝區中包含的內容:
SELECT name, target_name, CAST(target_data AS XML) target_dataFROM sys.dm_xe_sessions sINNER JOIN sys.dm_xe_session_targets tON s.address = t.event_session_addressWHERE s.name = ‘system_health‘;GO
若要查看事件檔案中的會話資料,請使用 Management Studio 中提供的擴充事件使用者介面。
還原system_health
會話
如果刪除 system_health 會話,則可以通過在查詢編輯器中執行 u_tables.sql 檔案來還原該會話。 該檔案位於下面的檔案夾中,其中 C: 表示您安裝 SQL Server 程式檔案的磁碟機:
C:\Program Files\Microsoft SQL Server\MSSQL11.<instanceid>\MSSQL\Install
請注意在還原該會話後,必須使用 ALTER EVENT SESSION 語句或使用物件總管中的“擴充事件”節點啟動會話。 否則,該會話會在您下次重新啟動 SQL Server 服務時自動啟動。
本文出自 “SQL Server Deep Dives” 部落格,請務必保留此出處http://ultrasql.blog.51cto.com/9591438/1599384
SQL Server擴充事件(Extended Events)—使用system_health擴充事件會話