本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
SQL Server 端点故障排除
本节包含特定于 SQL Server 的复制场景。为确定要从 SQL Server 复制哪些更改,Amazon DMS 读取事务日志,并对源数据库运行定期扫描。复制延迟通常是因为资源有限,SQL Server 限制这些扫描所导致。这也可能是由于短时间内写入事务日志的事件数量显著增加所导致。
索引重建
SQL Server 在重建大型索引时使用单个事务。这会生成大量事件,如果 SQL Server 同时重建多个索引,就可能会占用大量日志空间。发生这种情况时,可以预计会出现短暂的复制高峰。如果您的 SQL Server 源持续出现日志峰值,请检查以下内容:
首先,使用
CDCLatencySource
和CDCLatencySource
CloudWatch 指标或通过查看任务日志中的吞吐量监控消息来检查延迟峰值的时间段。有关 CloudWatch 指标的信息Amazon DMS,请参阅复制任务指标。检查在延迟高峰期间,活动事务日志或日志备份的大小是否增加。还要检查在这段时间内是否运行了维护作业或重建。有关检查事务日志大小的信息,请参阅 SQL Server 技术文档
中的监控日志空间使用情况 。 验证您的维护计划是否符合 SQL Server 最佳实践。有关 SQL Server 维护最佳实践的信息,请参阅 SQL Server 技术文档
中的索引维护策略 。
要修复索引重建期间延迟问题,请尝试以下操作:
使用
BULK_LOGGED
恢复模式进行离线重建,以减少任务必须处理的事件。如果可能,请在索引重建期间停止任务。或者,尝试将索引重建安排在非高峰时段,以减轻延迟峰值的影响。
尝试找出导致 DMS 读取速度减慢的资源瓶颈,例如磁盘延迟或 I/O 吞吐量,并加以解决。
大型事务
具有大量事件的事务或长时间运行的事务会导致事务日志增长。这会导致 DMS 读取时间更长,从而产生延迟。这类似于索引重建对复制性能的影响。
如果您不熟悉源数据库上的典型工作负载,则可能很难识别此问题。要排除此问题,请执行以下操作:
首先,使用
ReadThroughput
和WriteThroughput
CloudWatch 指标或通过查看任务日志中的吞吐量监控消息来确定延迟激增的时间。检查源数据库上在延迟高峰期间是否有任何长时间运行的查询。有关长时间运行的查询的信息,请参阅 SQL Server 技术文档
中的 SQL Server 中运行缓慢的查询故障排除 。 检查活动事务日志或日志备份的大小是否增加。有关更多信息,请参阅 SQL Server 技术文档
中的监控日志空间使用情况 。
要修复这个问题,请执行以下操作之一:
最好的解决办法是在应用程序端重构您的事务,使它们能够快速完成。
如果您无法重构事务,则短期解决方法是检查是否存在资源瓶颈,例如磁盘等待或 CPU 争用。如果您发现源数据库中存在瓶颈,则可以通过增加源数据库的磁盘、CPU 和内存资源来减少延迟。这可减少系统资源的争用,使得 DMS 查询可以更快地完成。
Amazon RDS SQL Server 的 MS-CDC 轮询间隔配置错误
Amazon RDS 实例上错误配置的轮询间隔设置可能会导致事务日志增长。这是因为复制会防止日志截断。虽然正在运行的任务可能会以最小的延迟继续复制,但停止和恢复任务或启动仅 CDC 的任务会导致任务失败。这是由于扫描大型事务日志时超时所造成。
要排除错误配置的轮询间隔,请执行以下操作:
检查活动的事务日志大小是否在增加,以及日志使用率是否接近 100%。有关更多信息,请参阅 SQL Server 技术文档
中的监控日志空间使用情况 。 检查日志截断是否延迟,并且
log_reuse_wait_desc value
为REPLICATION
。有关更多信息,请参阅 SQL Server 技术文档中的事务日志 (SQL Server) 。
如果您发现前面列表中的任何项目有问题,请调整 MS-CDC 轮询间隔。有关调整轮询间隔的信息,请参阅使用适用于 SQL Server 的 Amazon RDS 作为来源时的推荐设置 Amazon DMS。
从同一个源数据库复制多个 CDC 任务
在完全加载阶段,我们建议在任务之间拆分表以提高性能,以逻辑方式分隔依赖表,并减轻任务失败的影响。但是,在 CDC 阶段,我们建议整合任务以尽可能减少 DMS 扫描。在 CDC 阶段,每个 DMS 任务每分钟都会扫描几次事务日志以查找新事件。由于每个任务都是独立运行的,因此每个任务都会单独扫描每个事务日志。这会增加源 SQL Server 数据库的磁盘和 CPU 使用率。因此,大量并行运行的任务可能会导致 SQL Server 限制 DMS 读取,从而导致延迟增加。
如果有多个任务逐步开始,您可能很难确定此问题。此问题最常见的症状是大多数任务扫描开始需要花费更长的时间。这会导致这些扫描的延迟更高。SQL Server 会优先处理一些任务扫描,因此其中一些任务显示正常延迟。要排除此问题,请检查所有任务的 CDCLatencySource
指标。如果有些任务的 CDCLatencySource
增加,而少数几个任务的 CDCLatencySource
较低,则很可能是 SQL Server 限制了某些任务的 DMS 读取。
如果 SQL Server 在 CDC 期间限制任务读取,请整合任务以尽可能减少 DMS 扫描次数。可以连接到源数据库而不造成争用的最大任务数取决于源数据库容量、事务日志增长速率或表数量等因素。要确定复制场景的理想任务数量,请在与生产环境相似的测试环境中测试复制。