使用 system_health 工作階段

適用於:SQL ServerAzure SQL 受控執行個體

system_health 工作階段是預設包含 SQL Server 和 Azure SQL 受控執行個體的擴充事件工作階段。 當資料庫引擎啟動時,此工作階段會自動啟動,執行時不會有任何明顯的效能額外負荷。 此工作階段會收集系統資料,您可以用來協助疑難排解 Microsoft SQL Server 資料庫引擎的效能問題。

重要

特有建議您不要停止、改變或刪除 system_health 工作階段。 未來的產品更新,都可能會覆寫對 system_health 工作階段設定所做的任何變更。

此工作階段收集的資訊包括:

  • 針對遇到嚴重性 > = 20 的錯誤的任何工作階段,會收集其 sql_textsession_id
  • 針對遇到記憶體相關錯誤的任何工作階段,會收集 sql_textsession_id。 這些錯誤包括 17803、701、802、8645、8651、8657 和 8902。
  • 任何沒有產量之排程器問題的記錄 這些問題會在 SQL Server 錯誤記錄檔顯示為錯誤 17883。
  • 偵測到的任何死結,包括死結圖形。
  • 針對等候閂鎖 (或其他相關資源) callstack 15 秒的任何工作階段,會收集 sql_textsession_id 與 >。
  • 針對等候鎖定 callstack 30 秒的任何工作階段,會收集 sql_text、> 與 session_id
  • 針對已經等候先佔式等候一段長時間的任何工作階段,會收集 callstacksql_textsession_id。 此持續時間會因等候類型而異。 先佔式等候是指 SQL Server 在等候外部 API 呼叫。
  • 針對 CLR 配置和虛擬配置失敗,會收集 callstacksession_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_healthevent_file 目標,然後選取 [檢視目標資料],即可檢視 ring_buffer 工作階段資料。

Azure SQL 資料庫中沒有內建的 system_health 擴充事件工作階段,但您可使用 sys.fn_xe_file_target_read_file() 函數從您自己建立的擴充事件工作階段讀取,並儲存在 Azure 儲存體中。 如需逐步解說,請參閱 Azure SQL 資料庫中擴充事件的事件檔案目標程式碼