使用 system_health 工作階段
適用於:SQL Server Azure SQL 受控執行個體
system_health
工作階段是預設包含 SQL Server 和 Azure SQL 受控執行個體的擴充事件工作階段。 當資料庫引擎啟動時,此工作階段會自動啟動,執行時不會有任何明顯的效能額外負荷。 此工作階段會收集系統資料,您可以用來協助疑難排解 Microsoft SQL Server 資料庫引擎的效能問題。
重要
特有建議您不要停止、改變或刪除 system_health
工作階段。 未來的產品更新,都可能會覆寫對 system_health
工作階段設定所做的任何變更。
此工作階段收集的資訊包括:
- 針對遇到嚴重性 > = 20 的錯誤的任何工作階段,會收集其
sql_text
與session_id
。 - 針對遇到記憶體相關錯誤的任何工作階段,會收集
sql_text
與session_id
。 這些錯誤包括 17803、701、802、8645、8651、8657 和 8902。 - 任何沒有產量之排程器問題的記錄 這些問題會在 SQL Server 錯誤記錄檔顯示為錯誤 17883。
- 偵測到的任何死結,包括死結圖形。
- 針對等候閂鎖 (或其他相關資源)
callstack
15 秒的任何工作階段,會收集sql_text
、session_id
與 >。 - 針對等候鎖定
callstack
30 秒的任何工作階段,會收集sql_text
、> 與session_id
。 - 針對已經等候先佔式等候一段長時間的任何工作階段,會收集
callstack
、sql_text
與session_id
。 此持續時間會因等候類型而異。 先佔式等候是指 SQL Server 在等候外部 API 呼叫。 - 針對 CLR 配置和虛擬配置失敗,會收集
callstack
與session_id
。 - 記憶體 Broker、排程器監視器、記憶體節點 OOM、安全性和連線的環形緩衝區事件。
- 來自
sp_server_diagnostics
的系統元件結果。 scheduler_monitor_system_health_ring_buffer_recorded
收集的執行個體健康情況。- CLR 配置失敗。
- 使用
connectivity_ring_buffer_recorded
的連線錯誤。 - 使用
security_error_ring_buffer_recorded
的安全性錯誤。
注意
如需鎖死的詳細資訊,請參閱死結指南。 如需 SQL 錯誤訊息的詳細資訊,請參閱資料庫引擎事件與錯誤。
檢視 system_health 工作階段資料
工作階段會同時使用通道緩衝區目標和事件檔案目標來儲存資料。 事件檔案目標已設定 5 MB 的大小上限,以及 4 個檔案的檔案保留原則。
若要使用 SQL Server Management Studio 提供的擴充事件使用者介面來檢視通道緩衝區目標的工作階段資料,請參閱進階檢視 SQL Server 擴充事件的目標資料 - 檢視即時資料。
若要使用 Transact-SQL 來檢視通道緩衝區目標的工作階段資料,請使用下列查詢:
SELECT CAST(xet.target_data as xml) AS target_data
FROM sys.dm_xe_session_targets xet
JOIN sys.dm_xe_sessions xe
ON xe.address = xet.event_session_address
WHERE xe.name = 'system_health'
若要檢視事件檔案的工作階段資料,請使用 SQL Server Management Studio 提供的擴充事件事件檢視器 UI。 如需詳細資訊,請參閱檢視 SQL Server Management Studio 中的事件資料。
還原 system_health 工作階段
如果您刪除 system_health
工作階段,可以執行 u_tables.sql
指令碼來還原。 此檔案位於下列資料夾,其中 C:
代表您安裝 SQL Server 程式檔案的磁碟機,MSSQLnn
則代表 SQL Server 的主要版本:
C:\Program Files\Microsoft SQL Server\MSSQLnn.\<instanceid>\MSSQL\Install
在您還原此工作階段之後,必須使用 ALTER EVENT SESSION
陳述式或 [物件總管] 中的 [擴充事件] 節點來啟動此工作階段。 否則,此工作階段會在您下一次重新啟動 SQL Server 服務時自動啟動。
Azure SQL 中的 system_health 工作階段
在 Azure SQL 受控執行個體中,以滑鼠右鍵按一下物件總管中的 system_health
或 event_file
目標,然後選取 [檢視目標資料],即可檢視 ring_buffer
工作階段資料。
Azure SQL 資料庫中沒有內建的 system_health
擴充事件工作階段,但您可使用 sys.fn_xe_file_target_read_file()
函數從您自己建立的擴充事件工作階段讀取,並儲存在 Azure 儲存體中。 如需逐步解說,請參閱 Azure SQL 資料庫中擴充事件的事件檔案目標程式碼。