从第二个图看到,【同步状态】这一列,会有三种可能的内容:已同步(SYNCHRONIZED)、未同步(NOT SYNCHRONIZING)、正在同步(SYNCHRONIZING)。对于同步副本,应该为“已同步”状态,其他状态都意味着不正常。对于异步副本,却不应该显示“已同步”,而是应该为“正在同步”。但是不管哪种同步模式,“未同步”状态都意味着不正常。
对于同步状态,每个副本还可能有以下几种操作状态: PENDING_FAILOVER , PENDING , ONLINE , OFFLINE , FAILED , FAILED_NO_QUORUM和NULL(当副本未连接时)。详细内容可以从联机丛书中查看:sys.dm_hadr_availability_replica_states 和 角色和操作状态
上图的右上角,有三个超链接:【启动故障转移向导】、【查看AlwaysOn运行状态事件】、【查看群集仲裁信息】,其中第二个【查看AlwaysOn运行状态事件】是一些内置的扩展事件,下节会介绍。第三个包含了现有群集的配置信息,如下图:
接下来在右方的【添加/删除列】中:
点开之后可以看到下面的内容:
在这里,可以动态添加和移除需要显示在仪表板上的列。也可以在空白处右键,然后进行组的展开和折叠操作:
IF SERVERPROPERTY ('IsHadrEnabled') = 1
BEGIN
SELECT
AGC.name -- 可用性组名
, RCS.replica_server_name -- SQL群集节点名
, ARS.role_desc -- 副本角色
, AGL.dns_name -- 侦听器名
FROM sys.availability_groups_cluster AS AGC
INNER JOIN sys.dm_hadr_availability_replica_cluster_states AS RCS
ON RCS.group_id = AGC.group_id
INNER JOIN sys.dm_hadr_availability_replica_states AS ARS
ON ARS.replica_id = RCS.replica_id
INNER JOIN sys.availability_group_listeners AS AGL
ON AGL.group_id = ARS.group_id
WHERE ARS.role_desc = 'PRIMARY' --限定主副本,如果不限定,则可以查看所有副本
END
下面两个图分别是有WHERE条件和没有WHERE条件的结果:
SELECT message_id [error_number],
severity, --严重性,在1~25之间
text
FROM sys.messages
WHERE text LIKE ('%availability%')
AND is_event_logged = 1;--1=出现错误时将消息计入时间日志
select * from sys.dm_hadr_cluster
select * from sys.dm_hadr_cluster_members
select * from sys.dm_hadr_cluster_networks
select * from sys.availability_groups
select * from sys.availability_groups_cluster
select * from sys.dm_hadr_availability_group_states
select * from sys.availability_replicas
select * from sys.dm_hadr_availability_replica_cluster_nodes
select * from sys.dm_hadr_availability_replica_cluster_states
select * from sys.dm_hadr_availability_replica_states
select * from sys.dm_hadr_auto_page_repair
select * from sys.dm_hadr_database_replica_states
select * from sys.dm_hadr_database_replica_cluster_states
select * from sys.availability_group_listener_ip_addresses
select * from sys.availability_group_listeners
select * from sys.dm_tcp_listener_states
SELECT listener_id, ip_address, is_ipv4, port, type_desc, state_desc, start_time
FROM sys.dm_tcp_listener_states WITH (NOLOCK) OPTION (RECOMPILE);
-- AG Status
DECLARE @HADRName VARCHAR(25)
SET @HADRName = @@SERVERNAME
SELECT n.group_name
,n.replica_server_name
,n.node_name
,rs.role_desc
,db_name(drs.database_id) AS 'DBName'
,drs.synchronization_state_desc
,drs.synchronization_health_desc
FROM sys.dm_hadr_availability_replica_cluster_nodes n
JOIN sys.dm_hadr_availability_replica_cluster_states cs ON n.replica_server_name = cs.replica_server_name
JOIN sys.dm_hadr_availability_replica_states rs ON rs.replica_id = cs.replica_id
JOIN sys.dm_hadr_database_replica_states drs ON rs.replica_id = drs.replica_id
WHERE n.replica_server_name <> @HADRName
USE master
GO
SELECT message_id AS ErrorNumber
,TEXT
FROM sys.messages
WHERE TEXT LIKE ('%availability%')
AND language_id = 1033
可以看到很多内容:
ErrorNumber | 警告名 | 原因 |
1480 | AG角色变更(Failover) | 暗示着可用性组发生了故障转移,需要检查转移原因并确定是否需要转移回去。 |
976 | 数据库不可访问(Database Not Accessible) | 数据库不可用于查询,可能数据挂起或次要副本不可用于读访问。 |
983 | 数据库不可访问(Database Not Accessible) | 副本角色正在解析(resolving),数据库不可访问,检查SQL 错误日志和网络、存储及其他相关的错误信息事件日志),可能因为启动、故障转移、通讯或者群集错误引起。 |
3402 | 数据库正在还原(Database Restoring) | 数据库正在还原或者其他不能进行恢复的状态,检查数据库是否损坏或者在挂起状态。 |
19406 | AG副本状态变更(AG Replica Changed States) | 副本状态因为启动、故障转移、通讯或者群集故障等问题导致变更。检查日志再细分处理手段。 |
35206 | 连接超时(Connection Timeout) | 检查网络及防火墙问题,或者是否有副本传输故障。 |
35250 | 联接数据库失败(The connection to the primary replica is not active) | 因为对主副本的连接失败导致命令无法处理,检查SQL错误日志是否真正侦听端口及所有IP。 |
35264 | 数据移动挂起(Data Movement Suspended) | 需要手动恢复数据移动,检查SQL日志找到原因。 |
35273 | 数据库不可访问(Database Inaccessible) | 因为与主副本的会话中断导致恢复失败。可能由于WSFC仲裁、链接、端点配置或者权限问题导致。 |
35274 | 数据库恢复挂起(Database Recovery Pending) | 次要副本在等待接收来自于主副本的事务日志才能恢复联机,确保主副本所在的实例为联机状态。 |
35275 | 数据库挂起(Database in Suspect State) | 数据库处于潜在损坏的状态,不能连接到可用性组。还原数据库并重连可用性组。 |
35276 | 数据库不同步(Database Out of Sync) | 需要手工干预以便恢复同步。 |
41091 | 副本脱机(Replica Going Offline) | 如果重复出现需要检查原因。副本脱机可能因为租用过期或更新失败。或者网络问题,或者sp_server_diagnostic查询超时。 |
41131 | AG联机失败(Failed to Bring AG Online) | 确认WSFC节点是否联机,并且在WSFC群集中存在AG资源 |
41142 | 副本不能成为主要角色(Replica Cannot Become Primary) | 1个或多个数据库不同步或者不能连接到可用性组,或者群集以强制仲裁模式启动。 |
41406 | AG未为自动故障转移做好准备(AG Not Ready for Auto Failover) | 主次副本以自动故障转移模式配置,但是次要副本未准备成功。副本可能处于不可用状态。检查次要副本的其他信息。 |
41414 | 次要副本未连接(Secondary Not Connected) | 最少一个次要副本不能连接到主副本。检查SQL错误日志是否端口和IP侦听正常。 |
EXEC msdb.dbo.sp_add_alert
@name = N'[Name of Alert]’,
@message_id = 1480,
@severity = 0,
@enabled = 1,
@delay_between_responses = 0,
@include_event_description_in = 1;
GO
EXEC msdb.dbo.sp_add_notification
@alert_name = N'[Name of Alert]’,
@operator_name = N'[Operator]’,
@notification_method = 1;
GO
计数器名 | 主副本 | 次要副本/辅助副本 |
Availability Replica:Sends to Replica / Sec | √ | √ |
Availability Replica:Receives from Replica / Sec | √ | √ |
Availability Replica:Bytes Sent to Replica / Sec | √ | √ |
Availability Replica:Bytes Received from Replica / Sec | √ | √ |
Availability Replica:Sends to Transport / Sec | √ | √ |
Availability Replica:Bytes Sent to Transport / Sec | √ | √ |
Availability Replica:Resent Messages / Sec | √ | √ |
Availability Replica:Flow Control Time | √ | |
Availability Replica:Flow Control / Sec | √ | |
Database Replica:Redo Bytes Remaining | √ | |
Database Replica:Log Bytes Received / Sec | √ | |
Database Replica:File Bytes Received / Sec | √ | |
Database Replica:Log Remaining to Undo | √ | |
Database Replica:Total Log Requiring Undo | √ | |
Database Replica:Redone Bytes / Sec | √ | |
Database Replica:Recovery Queue | √ | |
Database Replica:Log Send Queue | √ | |
Database Replica:Transaction Delay | √ | |
Database Replica:Mirrored Write Transactions / Sec | √ |
select object_name,counter_name,instance_name,cntr_value
from sys.dm_os_performance_counters
where object_name like '%replica%'