設定可用性群組的擴充事件
適用於:SQL Server
SQL Server 定義特定於可用性群組的擴充事件。 當您對可用性群組進行疑難排解時,可以在某個工作階段中監視這些擴充事件來協助診斷根本原因。 您可以使用下列查詢檢視可用性群組擴充事件:
SELECT * FROM sys.dm_xe_objects WHERE name LIKE '%hadr%';
Alwayson_health 工作階段
alwayson_health
擴充事件工作階段是在您建立可用性群組時自動建立,會擷取可用性群組相關事件的子集。 此工作階段已預先設定為實用且方便的工具,可協助您對可用性群組進行疑難排解時快速開始。 「建立可用性群組精靈」會自動在精靈中設定的每個參與可用性複本上啟動工作階段。
重要
如果您未使用新增可用性群組精靈建立可用性群組,alwayson_health
工作階段可能無法自動啟動。 如果工作階段未啟動,就無法在發生未預期的問題時擷取事件資料。 您應該手動啟動工作階段,並設定工作階段內容,將工作階段設定為自動啟動。
若要檢視 alwayson_health
工作階段的定義:
在 [物件總管] 中,依序展開 [管理]、[擴充事件] 和 [工作階段]。
以滑鼠右鍵按一下 [Alwayson_health],然後指向 [將工作階段的指令碼編寫為],然後指向 [CREATE 至],然後選取 [新增查詢編輯器視窗]。
用於偵錯的擴充事件
除了 Alwayson_health 工作階段涵蓋的擴充事件,SQL Server 也為可用性群組定義一組廣泛的偵錯事件。 若要在工作階段中利用這些額外的擴充事件,請遵循下列程序:
在 [物件總管] 中,依序展開 [管理]、[擴充事件] 和 [工作階段]。
以滑鼠右鍵按一下 [工作階段],然後選取 [新增工作階段]。 或者,以滑鼠右鍵按一下 [Alwayson_health],選取 [屬性]。
在 [選取頁面] 窗格中,選取 [事件]。
在事件程式庫的 [類別目錄] 欄中,選取 [alwayson] 並清除所有其他類別目錄。
在 [通道] 欄中,選取 [偵錯]。 尚未選取的所有可用性群組相關事件現在會顯示在事件程式庫中。
反白顯示事件程式庫中的某個事件,然後選取 [>] 按鈕,為工作階段選取事件。
完成該工作階段之後,請選取 [確定] 將其關閉。 請確定工作階段已啟動,才能擷取您所選取的事件。
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