配置可用性组扩展事件
适用于: 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 To”,然后选择“新查询编辑器窗口”。
用于调试的扩展事件
除了 Alwayson_health 会话所涵盖的扩展事件外,SQL Server 还为可用性组定义了大量调试事件。 要在会话中利用这些额外的扩展事件,请执行以下过程:
在“对象资源管理器”中,依次展开“管理”、“扩展事件”和“会话”。
右键单击“会话”,然后选择“新建会话”。 或者,右键单击“Alwayson_health”并选择“属性”。
在“选择页”窗格中,选择“事件”。
在事件库中的“类别”列中,选择“alwayson”并清除所有其他类别。
在“频道”列中,选择“调试”。 尚未选择的所有可用性组相关事件现在都显示在事件库中。
突出显示事件库中的一个事件,然后选择 > 按钮选择将其用于会话。
完成会话后,选择“确定”将其关闭。 确保会话已启动,以便捕获所选事件。
availability_replica_state_change
更改可用性副本的状态时发生。 创建可用性组或联接可用性副本可触发此事件。 它对诊断自动故障转移失败非常有用。 还可用于跟踪故障转移步骤。
事件信息
列 | 说明 |
---|---|
名称 | availability_replica_state_change |
类别 | always on |
Channel | 可运行 |
事件字段
名称 | Type_name | 说明 |
---|---|---|
availability_group_id | guid | 可用性组的 ID。 |
availability_group_name | unicode_string | 可用性组的名称。 |
availability_replica_id | guid | 可用性副本的 ID。 |
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 |
类别 | always on |
Channel | 可运行 |
事件字段
名称 | Type_name | 说明 |
---|---|---|
availability_group_id | guid | 可用性组的 ID。 |
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 | |
类别 | always on |
通道 | 分析 |
事件字段
名称 | Type_name | 说明 |
---|---|---|
availability_group_id | guid | 可用性组的 ID。 |
availability_group_name | unicode_string | 可用性组的名称。 |
availability_replica_id | guid | 可用性副本的 ID。 |
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 |
类别 | 错误 |
通道 | 管理员 |
要筛选的错误号
错误号 | 说明 |
---|---|
35201 | 尝试建立与可用性副本“%ls”的连接时发生连接超时。 |
35202 | 已成功建立可用性组“%ls”从 ID 为 [%ls] 的可用性副本“%ls”到 ID 为 [%ls] 的“%ls”的连接。 这只是一条信息性消息。 不需要任何用户操作。 |
35206 | 之前建立的与可用性副本“%ls”的连接超时。 |
35204 | 由于终结点关闭,实例“%ls”和“%ls”之间的连接已禁用。 |
超时 + 已连接 | |
35207 | 由于错误 %d(严重性 %d,状态 %d),在可用性组 ID“%ls”上从副本 ID“%ls”到副本 ID“%ls”的连接尝试失败。 严重性 %d,状态 %d。 (这可能未正确使用 DBA。在这种情况下,请稍后检查并删除) |
35217 | (从 SQL Server 2019 CU15 (15.0.4198.2))开始,Always On 可用性组的线程池无法启动新的工作线程,因为没有足够的可用工作线程。 这可能会降低 Always On 可用性组的性能。 请使用“最大工作线程数”配置选项增加允许的线程数。 |
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 |
Channel | 可运行 |
事件字段
名称 | Type_name | 说明 |
---|---|---|
availability_group_id | guid | 可用性组的 ID。 |
availability_group_name | unicode_string | 可用性组的名称(如果可用)。 |
availability_replica_id | guid | 可用性副本的 ID。 |
database_replica_id | guid | 可用性数据库的 ID。 |
database_replica_name | unicode_string | 可用性数据库的名称。 |
database_id | uint32 | 可用性数据库的 ID。 |
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 |
类别 | always on |
通道 | 分析 |
事件字段
名称 | Type_name | 说明 |
---|---|---|
availability_group_id | Guid | 可用性组的 ID。 |
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 |
类别 | always on |
Channel | 可运行 |
事件字段
名称 | Type_name | 说明 |
---|---|---|
current_state | manager_state | 可用性副本管理器的当前状态。 联机 Offline 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:由于 REASON_MSG,REPLICATION_TYPE_MSG 数据库“DATABASE_NAME”正在将角色从“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 | 说明 |
---|---|---|
组件 | UInt8 | 组件名称。 |
state | UInt8 | 指示组件的运行状况。 |
数据 | 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 |
类别 | Transport |
通道 | 调试 |
事件字段
名称 | Type_name | 说明 |
---|---|---|
setup_event | Int32 | 连接设置事件 |
obj_address | 指针 | 连接终结点地址 |
endpoint_type | Int32 | 终结点类型 |
stream_status | Int32 | 连接流状态 |
error_number | UInt32 | 连接错误代码 |
connection_id | GUID | 连接 ID |
error_message | UnicodeString | 连接错误消息 |
address | UnicodeString | 连接目标地址 |
circuit_id | UnicodeString | 连接线路 ID |
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 |
Channel | 调试 |
事件字段
名称 | Type_name | 说明 |
---|---|---|
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