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