如何对我的 Amazon RDS for SQL Server 只读副本中的滞后问题进行故障排除?

2 分钟阅读
0

我有一个包含只读副本的 Amazon Relational Database Service (Amazon RDS) for Microsoft SQL Server 实例。我想对我的 Amazon RDS for SQL Server 实例中的副本滞后问题进行故障排除。

简短描述

Amazon RDS for SQL Server 企业版支持在同一 AWS 区域和跨区域创建只读副本。数据复制是异步操作,该操作使用 Always-On 技术将数据从主实例复制到副本实例。RDS for SQL Server 不会自动减少源数据库实例与其只读副本之间的高副本滞后。

解决方法

检查您的资源利用率

使用 Amazon CloudWatch 增强监控和性能详情详细检查主实例和副本实例上的资源利用率

确认 CPU 利用率不受限制。如果您使用可突增实例类型,请确保您有可用的 CPU 积分或您已开启 Unlimited(无限制)模式。

确保有足够的 FreeableMemory,且 ReadIOPSWriteIOPS 符合预置配额。如果您使用 gp2 卷,请确认您有可用的突增余额

检查 ReadThroughputWriteThroughput 是否达到实例类型配额

**注意:**副本实例中缺少资源可能会导致副本滞后。最佳做法是创建具有相同实例类型、存储类型和 IOPS 数量的主实例和副本实例。当与主实例相比使用量最小时,您还可以纵向扩展或缩减只读副本。

确定副本滞后开始增加的时间范围,然后执行以下操作:

  • 检查主实例上的 WriteIOPSWriteThroughputNetworkReceiveThroughputNetworkTrasmitThroughput 指标。确定写入活动是否导致了滞后。然后,在同一时间段内检查只读副本上的相同指标。
  • 检查主实例上是否存在长时间运行的事务。要检查活动事务的状态,请运行与以下示例类似的查询:
    SELECT *
    FROM sys.sysprocesses
    WHERE open_tran = 1;

识别等待和死锁

检查副本实例上是否存在任何严重的锁定等待或死锁。死锁将发生在 SelectDDL/DML 事务之间,且会导致从主实例应用事务日志出现延迟。

要检查是否存在阻止,请运行与以下示例类似的查询:

SELECT * FROM sys.sysprocesses WHERE blocked > 0;

检查副本滞后

在主实例上运行查询以检查副本滞后和最大副本滞后。

副本滞后

运行以下查询:

SELECT
    AR.replica_server_name,
    DB_NAME (ARS.database_id) 'database_name',
    AR.availability_mode_desc,
    ARS.synchronization_health_desc,
    ARS.last_hardened_lsn,
    ARS.last_redone_lsn,
    ARS.secondary_lag_seconds,
FROM
    sys.dm_hadr_database_replica_states ARS
INNER JOIN
    sys.availability_replicas AR ON ARS.replica_id = AR.replica_id
WHERE
    DB_NAME(ARS.database_id) = 'database_name'
ORDER BY
    AR.replica_server_name;

**注意:**请将 database_name 替换为您的数据库名称。

验证只读副本上的 last_hardened_lsn 值是否有进展。

最大副本滞后

对于 SQL Server,ReplicaLag 指标表示落后的数据库的最大滞后(以秒为单位)。例如,如果您有两个数据库分别滞后 5 秒和 10 秒,则 ReplicaLag 为 10 秒。要计算 ReplicaLag 指标,请在主实例上运行以下查询:

SELECT max(secondary_lag_seconds) max_lag
FROM sys.dm_hadr_database_replica_states;

管理数据同步和实例运行状况

当创建只读副本时,Amazon RDS 会从主实例拍摄快照,然后恢复快照以创建只读副本实例。Amazon RDS 将重播事务日志,以将数据与主实例同步。但是,在您创建新实例后,该实例会出现延迟加载,从而导致副本滞后。这是预期行为。为了减少延迟加载的影响,请在创建只读副本时使用 io1 或 io2 卷类型。创建副本后,您可以转换回 gp2 或 gp3 卷类型。

在主实例上分批运行事务以避免长事务,并使事务日志文件大小保持较小。请仅在高副本滞后期间需要时重启副本实例。否则,Amazon RDS 会延迟事务日志重播,且您的数据库可能会进入 Recovery(恢复)状态。

由于处理来自主实例的日志,因此当修改主实例或副本实例上的实例类型时,可能会暂时出现副本滞后。

此外,当修改存储类型或存储大小时,副本滞后可能会暂时出现,直到存储优化完成。您无法监控存储优化的进度。

如果您仍然遇到副本滞后问题,请检查副本实例上用户数据库的状态。要重播日志,数据库状态必须为 Online(在线)。

注意:

  • 仅当新创建的数据库可以在只读副本上进行访问后,Amazon RDS 才会在滞后计算中包含这些数据库。
  • 当 Amazon RDS 无法确定滞后时,例如在副本设置期间或当只读副本处于错误状态时,ReplicaLag 将返回 -1

相关信息

在 Amazon RDS 中使用 Microsoft SQL Server 的只读副本

AWS 官方
AWS 官方已更新 2 个月前