設定可用性群組的擴充事件

適用於:SQL Server

SQL Server 定義特定於可用性群組的擴充事件。 當您對可用性群組進行疑難排解時,可以在某個工作階段中監視這些擴充事件來協助診斷根本原因。 您可以使用下列查詢檢視可用性群組擴充事件:

SELECT * FROM sys.dm_xe_objects WHERE name LIKE '%hadr%';

Alwayson_health 工作階段

alwayson_health 擴充事件工作階段是在您建立可用性群組時自動建立,會擷取可用性群組相關事件的子集。 此工作階段已預先設定為實用且方便的工具,可協助您對可用性群組進行疑難排解時快速開始。 「建立可用性群組精靈」會自動在精靈中設定的每個參與可用性複本上啟動工作階段。

重要

如果您未使用新增可用性群組精靈建立可用性群組,alwayson_health 工作階段可能無法自動啟動。 如果工作階段未啟動,就無法在發生未預期的問題時擷取事件資料。 您應該手動啟動工作階段,並設定工作階段內容,將工作階段設定為自動啟動。

若要檢視 alwayson_health 工作階段的定義:

  1. 在 [物件總管] 中,依序展開 [管理]、[擴充事件] 和 [工作階段]

  2. 以滑鼠右鍵按一下 [Alwayson_health],然後指向 [將工作階段的指令碼編寫為],然後指向 [CREATE 至],然後選取 [新增查詢編輯器視窗]。

用於偵錯的擴充事件

除了 Alwayson_health 工作階段涵蓋的擴充事件,SQL Server 也為可用性群組定義一組廣泛的偵錯事件。 若要在工作階段中利用這些額外的擴充事件,請遵循下列程序:

  1. 在 [物件總管] 中,依序展開 [管理]、[擴充事件] 和 [工作階段]

  2. 以滑鼠右鍵按一下 [工作階段],然後選取 [新增工作階段]。 或者,以滑鼠右鍵按一下 [Alwayson_health],選取 [屬性]

  3. 在 [選取頁面] 窗格中,選取 [事件]。

  4. 在事件程式庫的 [類別目錄] 欄中,選取 [alwayson] 並清除所有其他類別目錄。

  5. 在 [通道] 欄中,選取 [偵錯]。 尚未選取的所有可用性群組相關事件現在會顯示在事件程式庫中。

  6. 反白顯示事件程式庫中的某個事件,然後選取 [>] 按鈕,為工作階段選取事件。

  7. 完成該工作階段之後,請選取 [確定] 將其關閉。 請確定工作階段已啟動,才能擷取您所選取的事件。

availability_replica_state_change

在可用性複本的狀態變更時發生。 建立可用性群組或加入可用性複本會觸發此事件。 它對於診斷失敗的自動容錯移轉很好用。 它也可以用來追蹤容錯移轉步驟。

事件資訊

資料行 描述
名稱 availability_replica_state_change
類別 永遠開啟
通路 運作

事件欄位

名稱 Type_name Description
availability_group_id guid 可用性群組的識別碼。
availability_group_name unicode_string 可用性群組的名稱。
availability_replica_id guid 可用性複本的識別碼。
previous_state availability_replica_state 複本在變更之前的角色。

可能的值包括:

Primary_Normal

Secondary_Normal

Resolving_Pending_Failover

Resolving_Normal

Primary_Pending

Not_Available
current_state availability_replica_state 複本在變更之後的角色。

可能的值包括:

Primary_Normal

Secondary_Normal

Resolving_Pending_Failover

Resolving_Normal

Primary_Pending

Not_Available

alwayson_health 工作階段定義

CREATE EVENT SESSION [alwayson_health] ON SERVER
ADD EVENT availability_replica_state_change
ADD TARGET package0.event_file (
    SET filename = N'alwayson_health.xel',
    max_file_size = (5),
    max_rollover_files = (4),
    metadatafile = N'alwayson_health.xem'
    )
    WITH (
            MAX_MEMORY = 4096 KB,
            EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
            MAX_DISPATCH_LATENCY = 30 SECONDS,
            MAX_EVENT_SIZE = 0 KB,
            MEMORY_PARTITION_MODE = NONE,
            TRACK_CAUSALITY = OFF,
            STARTUP_STATE = ON
            )
GO

availability_group_lease_expired

當叢集和可用性群組有連線問題和租用到期時發生。 這個事件表示可用性群組與基礎 WSFC 叢集之間的連線已中斷。 如果主要複本上發生連線問題,事件可能會造成自動容錯移轉,或造成可用性群組離線。

事件資訊

資料行 描述
名稱 availability_group_lease_expired
類別 永遠開啟
通路 運作

事件欄位

名稱 Type_name Description
availability_group_id guid 可用性群組的識別碼。
availability_group_name unicode_string 可用性群組的名稱。

alwayson_health 工作階段定義

CREATE EVENT SESSION [alwayson_health] ON SERVER
ADD EVENT availability_group_lease_expired
ADD TARGET package0.event_file (
    SET filename = N'alwayson_health.xel',
    max_file_size = (5),
    max_rollover_files = (4),
    metadatafile = N'alwayson_health.xem'
    )
    WITH (
            MAX_MEMORY = 4096 KB,
            EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
            MAX_DISPATCH_LATENCY = 30 SECONDS,
            MAX_EVENT_SIZE = 0 KB,
            MEMORY_PARTITION_MODE = NONE,
            TRACK_CAUSALITY = OFF,
            STARTUP_STATE = ON
            )
GO

availability_replica_automatic_failover_validation

當自動容錯移轉將可用性複本的整備度驗證為主要複本時發生,會顯示目標可用性複本是否已準備好成為新的主要複本。 例如,容錯移轉驗證會在並非所有資料庫都同步處理或未聯結時傳回 false。 此事件是設計來提供容錯移轉期間的失敗點。 這項資訊是特別針對自動容錯移轉,對資料庫管理員很重要,因為自動容錯移轉是自動的作業。 資料庫管理員可以檢閱事件,以查看自動容錯移轉失敗的原因。

事件資訊

名稱 描述
availability_replica_automatic _failover_validation
類別 永遠開啟
通路 分析

事件欄位

名稱 Type_name Description
availability_group_id guid 可用性群組的識別碼。
availability_group_name unicode_string 可用性群組的名稱。
availability_replica_id guid 可用性複本的識別碼。
forced_quorum validation_result_type 如果值為 TRUE,則這個可用性複本上的自動容錯移轉已失效。

true

FALSE
joined_and_synchronized validation_result_type 如果值為 FALSE,則這個可用性複本上的自動容錯移轉已失效。

true

FALSE
previous_primary_or_automatic_failover_target validation_result_type 如果值為 FALSE,則這個可用性複本上的自動容錯移轉已失效。

true

FALSE

alwayson_health 工作階段定義

CREATE EVENT SESSION [alwayson_health] ON SERVER
ADD EVENT availability_replica_automatic_failover_validation (
    WHERE (
        [forced_quorum] = (TRUE)
        OR [joined_and_synchronized] = (FALSE)
        OR [previous_primary_or_automatic_failover_target] = (TRUE)
        )
    ) ADD TARGET package0.event_file (
    SET filename = N'alwayson_health.xel',
    max_file_size = (5),
    max_rollover_files = (4),
    metadatafile = N'alwayson_health.xem'
    )
    WITH (
            MAX_MEMORY = 4096 KB,
            EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
            MAX_DISPATCH_LATENCY = 30 SECONDS,
            MAX_EVENT_SIZE = 0 KB,
            MEMORY_PARTITION_MODE = NONE,
            TRACK_CAUSALITY = OFF,
            STARTUP_STATE = ON
            )
GO

error_reported (多個錯誤號碼):適用於傳輸或連線問題

每個篩選的事件指出在可用性群組所依賴的傳輸或資料庫鏡像端點中發生的連線問題。

資料行 描述
名稱 error_reported

要篩選的數字:35201、35202、35206、35204、35207、35217、9642、9666、9691、9692、9693、28034、28036、28080、28091、33309
類別 錯誤
通路 管理

要篩選的錯誤號碼

錯誤號碼 Description
35201 嘗試建立可用性複本 '%ls' 的連線時發生連線逾時。
35202 已成功建立可用性群組 '%ls' 從可用性複本 '%ls' (識別碼為 [%ls]) 到 '%ls' (識別碼為 [%ls]) 的連線。 此為參考用訊息, 使用者不必採取任何動作。
35206 先前建立到可用性複本 '%ls' 的連線發生連線逾時。
35204 執行個體 '%ls' 與 '%ls' 之間的連線因為端點關閉而已停用。
逾時 + 已連線
35207 在可用性群組識別碼 '%ls' 上試圖從複本識別碼 '%ls' 連線至複本識別碼 '%ls' 失敗,因為發生錯誤 %d,嚴重性 %d,狀態 %d。 嚴重性 %d,狀態 %d。 (這可能不是很好的 DBA 用途。請檢查,如果是該狀況則稍後移除)
35217 (從 SQL Server 2019 CU15 (15.0.4198.2) 開始),因為沒有足夠的可用背景工作執行緒,所以 Always On 可用性群組的執行緒集區無法啟動新的背景工作執行緒。 這可能會降低 Always On 可用性群組效能。 請使用 "max worker threads" 組態選項以增加允許的執行緒數目。
9642 Service Broker/資料庫鏡像傳輸連接端點發生錯誤,錯誤: %i,狀態: %i。 (近的端點角色: %S_MSG,遠的端點位址: '%.*hs') 錯誤: %i,狀態: %i。 (近的端點角色: %S_MSG,遠的端點位址: '%.*hs')
9666 %S_MSG 端點處於停用或已停止狀態。
9691 %S_MSG 端點已停止接聽連線。
9692 %S_MSG 端點無法接聽連接埠 %d,因為它正由另一個程序使用。
9693 由於發生下列錯誤,所以 %S_MSG 端點無法接聽連線: '%.*ls'。
28034 連接交握失敗。 登入 '%.*ls' 在端點上沒有 CONNECT 權限。 狀態 %d。
28036 連接交握失敗。 找不到此端點使用的憑證: %S_MSG。 請在 master 資料庫執行 DBCC CHECKDB,驗證端點的中繼資料完整性。 狀態 %d。
28080 連接交握失敗。 %S_MSG 端點尚未設定。 狀態 %d。
28091 不支援在沒有驗證的情況下啟動 %S_MSG 的端點。
33309 因為尚未載入預設的 %S_MSG 端點組態,所以無法啟動叢集端點。

alwayson_health 工作階段定義

CREATE EVENT SESSION [alwayson_health] ON SERVER
ADD EVENT sqlserver.error_reported (
    WHERE (
        --Connectivity Error Messages
        [error_number] = (35201)
        OR [error_number] = (35202)
        OR [error_number] = (35204)
        OR [error_number] = (35206)
        OR [error_number] = (35207)
        OR [error_number] = (35217)
        OR [error_number] = (9642)
        --OR [error_number]=(9666)
        OR [error_number] = (9691)
        OR [error_number] = (9692)
        OR [error_number] = (9693)
        OR [error_number] = (28034)
        OR [error_number] = (28036)
        OR [error_number] = (28080)
        OR [error_number] = (28091)
        OR [error_number] = (33309)
        )
    ) ADD TARGET package0.event_file (
    SET filename = N'alwayson_health.xel',
    max_file_size = (5),
    max_rollover_files = (4),
    metadatafile = N'alwayson_health.xem'
    )
    WITH (
            MAX_MEMORY = 4096 KB,
            EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
            MAX_DISPATCH_LATENCY = 30 SECONDS,
            MAX_EVENT_SIZE = 0 KB,
            MEMORY_PARTITION_MODE = NONE,
            TRACK_CAUSALITY = OFF,
            STARTUP_STATE = ON
            )
GO

data_movement_suspend_resume

資料庫複本的資料庫移動暫止或繼續時發生。

事件資訊

資料行 描述
名稱 data_movement_suspend_resume
類別 Always on
通路 運作

事件欄位

名稱 Type_name Description
availability_group_id guid 可用性群組的識別碼。
availability_group_name unicode_string 可用性群組的名稱 (如果有)。
availability_replica_id guid 可用性複本的識別碼。
database_replica_id guid 可用性資料庫的識別碼。
database_replica_name unicode_string 可用性資料庫的名稱。
database_id uint32 可用性資料庫的識別碼。
suspend_status suspend_status_type 暫止狀態值。

SUSPEND_NULL

RESUMED

SUSPENDED

SUSPENDED_INVALID
suspend_source suspend_source_type 暫止或繼續動作的來源。
suspend_reason unicode_string 在資料庫複本管理員中擷取到的暫止原因。

alwayson_health 工作階段定義

CREATE EVENT SESSION [alwayson_health] ON SERVER
ADD EVENT data_movement_suspend_resume (
    WHERE (
        [suspend_status] = (SUSPENDED)
        OR [suspend_status] = (SUSPENDED_INVALID)
        OR [suspend_status] = (SUSPEND_NULL)
        )
    ) ADD TARGET package0.event_file (
    SET filename = N'alwayson_health.xel',
    max_file_size = (5),
    max_rollover_files = (4),
    metadatafile = N'alwayson_health.xem'
    )
    WITH (
            MAX_MEMORY = 4096 KB,
            EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
            MAX_DISPATCH_LATENCY = 30 SECONDS,
            MAX_EVENT_SIZE = 0 KB,
            MEMORY_PARTITION_MODE = NONE,
            TRACK_CAUSALITY = OFF,
            STARTUP_STATE = ON
            )
GO

alwayson_ddl_executed

可用性群組資料定義語言 (DDL) 陳述式 (包括 CREATE、ALTER 或 DROP) 執行時發生。 事件的主要目的是指出可用性複本上使用者動作的問題,或指出作業動作的起點,後面接執行階段問題,例如手動容錯移轉、強制容錯移轉,暫止的資料移動,或繼續的資料移動。

事件資訊

資料行 描述
名稱 alwayson_ddl_execution
類別 永遠開啟
通路 分析

事件欄位

名稱 Type_name Description
availability_group_id Guid 可用性群組的識別碼。
availability_group_name unicode_string 可用性群組的名稱。
ddl_action alwayson_ddl_action 表示 DDL 動作的類型:CREATE、ALTER 或 DROP。
ddl_phase ddl_opcode 表示 DDL 作業的階段:BEGIN、COMMIT 或 ROLLBACK。
陳述式 unicode_string 所執行陳述式的文字。

alwayson_health 工作階段定義

CREATE EVENT SESSION [alwayson_health] ON SERVER
ADD EVENT alwayson_ddl_executed
ADD TARGET package0.event_file (
    SET filename = N'alwayson_health.xel',
    max_file_size = (5),
    max_rollover_files = (4),
    metadatafile = N'alwayson_health.xem'
    )
    WITH (
            MAX_MEMORY = 4096 KB,
            EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
            MAX_DISPATCH_LATENCY = 30 SECONDS,
            MAX_EVENT_SIZE = 0 KB,
            MEMORY_PARTITION_MODE = NONE,
            TRACK_CAUSALITY = OFF,
            STARTUP_STATE = ON
            )
GO

availability_replica_manager_state

在可用性複本管理員的狀態變更時發生。 此事件表示可用性複本管理員的活動訊號。 當可用性複本管理員不是處於狀況良好狀態時,SQL Server 執行個體中的所有可用性複本都將會關閉。

事件資訊

資料行 描述
名稱 availability_replica_manager_state_change
類別 永遠開啟
通路 運作

事件欄位

名稱 Type_name Description
current_state manager_state 可用性複本管理員的目前狀態。

線上

離線

WaitingForClusterCommunication

Alwayson_health 工作階段定義

CREATE EVENT SESSION [alwayson_health] ON SERVER
ADD EVENT availability_replica_manager_state (WHERE ([current_state] = (OFFLINE)))
ADD TARGET package0.event_file (
    SET filename = N'alwayson_health.xel',
    max_file_size = (5),
    max_rollover_files = (4),
    metadatafile = N'alwayson_health.xem'
    )
    WITH (
            MAX_MEMORY = 4096 KB,
            EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
            MAX_DISPATCH_LATENCY = 30 SECONDS,
            MAX_EVENT_SIZE = 0 KB,
            MEMORY_PARTITION_MODE = NONE,
            TRACK_CAUSALITY = OFF,
            STARTUP_STATE = ON
            )
GO

error_reported (1480):資料庫複本角色變更

此篩選的 error_reported 事件會在可用性複本角色變更之後以非同步方式發生。 它指出可用性資料庫在容錯移轉程序期間無法變更其預期的角色。

事件資訊

資料行 描述
名稱 error_reported

錯誤號碼 1480:REPLICATION_TYPE_MSG 資料庫 "DATABASE_NAME" 因為 REASON_MSG 從 "OLD_ROLE" 角色變更為 "NEW_ROLE"
類別 錯誤
通路 管理

alwayson_health 工作階段定義

CREATE EVENT SESSION [alwayson_health] ON SERVER
ADD EVENT sqlserver.error_reported (
    WHERE (
        --database replica role change message
        OR [error_number] = (1480)
        --database replica runtime error messages
        OR [error_number] = (823)
        OR [error_number] = (824)
        OR [error_number] = (829)
        )
    ) ADD TARGET package0.event_file (
    SET filename = N'alwayson_health.xel',
    max_file_size = (5),
    max_rollover_files = (4),
    metadatafile = N'alwayson_health.xem'
    )
    WITH (
            MAX_MEMORY = 4096 KB,
            EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
            MAX_DISPATCH_LATENCY = 30 SECONDS,
            MAX_EVENT_SIZE = 0 KB,
            MEMORY_PARTITION_MODE = NONE,
            TRACK_CAUSALITY = OFF,
            STARTUP_STATE = ON
            )
GO

sqlserver.sp_server_diagnostics_component_result

擷取有關 SQL Server 的診斷資料和健全狀況資訊,以偵測潛在的失敗。 此程序會以重複模式執行,並定期傳送結果。 從 SQL Server 2019 CU15 (15.0.4198.2) 開始,即可使用此擴充事件工作階段。

事件資訊

名稱 描述
名稱 sp_server_diagnostics_component_result
類別 伺服器
通路 偵錯

事件欄位

名稱 Type_name 描述
component UInt8 元件名稱。
state UInt8 指出元件的健全狀態。
data XML 包含元件相關額外資訊的 XML 欄位。

alwayson_health 工作階段定義

CREATE EVENT SESSION [alwayson_health] ON SERVER
ADD EVENT sqlserver.sp_server_diagnostics_component_result (SET collect_data = (1) WHERE ([state] = (3)))
ADD TARGET package0.event_file (
    SET filename = N'alwayson_health.xel',
    max_file_size = (5),
    max_rollover_files = (4),
    metadatafile = N'alwayson_health.xem'
    )
    WITH (
            MAX_MEMORY = 4096 KB,
            EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
            MAX_DISPATCH_LATENCY = 30 SECONDS,
            MAX_EVENT_SIZE = 0 KB,
            MEMORY_PARTITION_MODE = NONE,
            TRACK_CAUSALITY = OFF,
            STARTUP_STATE = ON
            )
GO

ucs.ucs_connection_setup

傾印主要和次要複本之間的連線能力或網路相關的記錄。 從 SQL Server 2019 CU15 (15.0.4198.2) 開始,即可使用此擴充事件工作階段。

事件資訊

名稱 描述
名稱 ucs_connection_setup
類別 傳輸
通路 偵錯

事件欄位

名稱 Type_name Description
setup_event Int32 連線設定事件
obj_address Pointer 連線端點位址
endpoint_type Int32 端點類型
stream_status Int32 連線資料流狀態
error_number UInt32 連線錯誤碼
connection_id GUID 連線識別碼
error_message UnicodeString 連線錯誤訊息
address UnicodeString 連線目標位址
circuit_id UnicodeString 連線線路識別碼

alwayson_health 工作階段定義

CREATE EVENT SESSION [alwayson_health] ON SERVER
ADD EVENT ucs.ucs_connection_setup
ADD TARGET package0.event_file (
    SET filename = N'alwayson_health.xel',
    max_file_size = (5),
    max_rollover_files = (4),
    metadatafile = N'alwayson_health.xem'
    )
    WITH (
            MAX_MEMORY = 4096 KB,
            EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
            MAX_DISPATCH_LATENCY = 30 SECONDS,
            MAX_EVENT_SIZE = 0 KB,
            MEMORY_PARTITION_MODE = NONE,
            TRACK_CAUSALITY = OFF,
            STARTUP_STATE = ON
            )
GO

sqlserver.hadr_trace_message

將某些 DBCC 命令和 HADR 記錄資訊的輸出重新導向至擴充事件工作階段 (類似追蹤旗標 3605)。 從 SQL Server 2019 CU15 (15.0.4198.2) 開始,即可使用此擴充事件工作階段。

事件資訊

名稱 描述
名稱 hadr_trace_message
類別 Always on
通路 偵錯

事件欄位

名稱 Type_name Description
hadr_message unicode_string 將某些 DBCC 命令和 HADR 記錄資訊的輸出重新導向至擴充事件工作階段 (類似追蹤旗標 3605)。

alwayson_health 工作階段定義

CREATE EVENT SESSION [alwayson_health] ON SERVER
ADD EVENT sqlserver.hadr_trace_message
ADD TARGET package0.event_file (
    SET filename = N'alwayson_health.xel',
    max_file_size = (5),
    max_rollover_files = (4),
    metadatafile = N'alwayson_health.xem'
    )
    WITH (
            MAX_MEMORY = 4096 KB,
            EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
            MAX_DISPATCH_LATENCY = 30 SECONDS,
            MAX_EVENT_SIZE = 0 KB,
            MEMORY_PARTITION_MODE = NONE,
            TRACK_CAUSALITY = OFF,
            STARTUP_STATE = ON
            )
GO

下一步