Als*_*sin 2 sql-server availability-groups sql-server-2016
这是一个奇怪的场景。事务日志已满。它等待AG。AG一切都好。无延迟,最后提交/硬化时间在所有节点上几乎都是实时的。预计恢复时间为零。我也从主节点和辅助节点检查了这一点(以防仪表板未更新)。此页面仅列出了此错误的两个原因:传递延迟和重做延迟。没有任何内容适用于我的系统。如何进一步解决这个问题?
编辑 1。我们对环境所做的唯一更改是添加了两个 SQL Server 2019 节点以准备迁移。但它不应该出现这样的问题。
编辑2。我发现的唯一解决方法是将数据库重新添加到AG。
您应该检查 DMV 以确认 AG 的发送和重做队列运行状况良好。SSMS 中的仪表板在代表真实的发送和重做运行状况方面表现不佳。
作为我的开源 DBA 数据库的一部分,我有一个Check_AGHealth
存储过程,您可以使用它来提供更多信息。
如果不使用完整的存储过程,则在主数据库上运行的一些重要语句如下:
dm_hadr_database_replica_states
此查询返回一堆数据,但您需要查找的有趣的内容是:
关于此的子句ORDER BY
应该将这些内容冒泡到结果集的顶部,但是这些内容中的任何一个都会给清除日志带来问题,并且会显示日志重用等待AVAILABILITY_REPLICA
SELECT ServerName = ar.replica_server_name,
AgName = ag.Name,
DbName = db_name(ds.database_id),
AgRole = rs.role_desc,
rs.role ,
UnsentLogMB = ds.log_send_queue_size/1024.0,
RedoQueueSizeMB = ds.redo_queue_size/1024.0,
RedoEstCompletion = CASE WHEN redo_rate = 0 THEN 0 ELSE ds.redo_queue_size/ds.redo_rate END,
SynchState = ds.synchronization_state_desc,
AgHealth = ds.synchronization_health_desc,
SuspendReason = ds.suspend_reason_desc,
SynchHardenedLSN = ds.last_hardened_lsn,
LastHardenedTime = ds.last_hardened_time,
LastRedoneTime = ds.last_redone_time,
LastCommitTime = ds.last_commit_time
FROM sys.availability_groups AS ag
JOIN sys.availability_replicas AS ar ON ar.group_id = ag.group_id
JOIN sys.dm_hadr_database_replica_states AS ds ON ds.group_id = ar.group_id AND ds.replica_id = ar.replica_id
JOIN sys.dm_hadr_availability_replica_states AS rs ON rs.replica_id = ds.replica_id
ORDER BY
CASE
WHEN ds.suspend_reason_desc IS NOT NULL THEN 1
WHEN ds.synchronization_state_desc <> 'HEALTHY' THEN 1
ELSE 9
END,
rs.role DESC,
ds.log_send_queue_size + ds.redo_queue_size DESC
;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1416 次 |
最近记录: |