適用於:SQL Server
Azure SQL 受控執行個體
system_health 工作階段是 Extended Events 工作階段,SQL Server 和 Azure SQL 受控執行個體預設會包含此工作階段。 當資料庫引擎啟動時,此工作階段會自動啟動,執行時不會有任何明顯的效能額外負荷。 此工作階段會收集系統資料,您可利用這些資料來協助疑難排解資料庫引擎中的效能問題。
重要
我們建議您不要停止、變更或刪除 system_health 工作階段。 對 system_health 工作階段設定所做的任何變更,都可能會在日後的產品更新中遭到覆寫。
此工作階段收集的資訊包括下列資訊:
- 對於遇到嚴重性為 >= 20 的錯誤的任何工作階段,將會收集
sql_text和session_id。 - 針對遇到記憶體相關錯誤的任何工作階段,會收集
sql_text與session_id。 這些錯誤包括 17803、701、802、8645、8651、8657 和 8902。 - 任何未讓出控制權的排程器問題記錄 這些問題會在 SQL Server 錯誤記錄檔顯示為錯誤 17883。
- 偵測到的任何死結,包括死結圖形。
- 針對等候閂鎖 (或其他相關資源)
callstack15 秒的任何工作階段,會收集sql_text、session_id與 >。 - 針對等候鎖定
callstack30 秒的任何工作階段,會收集sql_text、session_id與 >。 - 任何已因先占式等候而等待很長時間的工作階段的
callstack、sql_text和session_id。 此持續時間會因等候類型而異。 先佔式等候是指 SQL Server 在等候外部 API 呼叫。 - 適用於 CLR 配置和虛擬配置失敗的
callstack與session_id。 - 記憶體代理程式、排程器監視器、記憶體節點 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 Standard 和 Enterprise 版本中,事件檔案目標已增加限制:大小上限為 100 MB,檔案保留原則為 10 個檔案。
若要使用 SQL Server Management Studio 中提供的 Extended Events 使用者介面來檢視來自環形緩衝區目標的工作階段資料,請參閱在 SQL Server 中進階檢視 Extended Events 的目標資料 - 觀看即時資料。
若要使用 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 資料庫中擴充事件的事件檔案目標程式碼。