本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
本节包含可能导致目标延迟的场景。
索引问题
在 CDC 阶段,AWS DMS 通过在目标系统上执行 DML 语句(插入、更新和删除)来复制源上的更改。对于使用 DMS 的异构迁移,源端和目标端在索引优化方面的不同,可能会需要导致花费更长的时间写入目标系统。这会引发目标延迟和性能问题。
要排除此索引问题,请执行以下操作:这些步骤的过程因不同的数据库引擎而异。
监控目标数据库的查询时间。比较目标和源上的查询执行时间可以指明哪些索引需要优化。
为运行缓慢的查询启用日志记录。
要修复长时间运行复制的索引问题,请执行以下操作:
调整源数据库和目标数据库上的索引,使源数据库和目标数据库上具有相似的查询执行时间。
比较源和目标的 DML 查询中使用的二级索引。确保目标上的 DML 性能与源 DML 性能相当或更好。
请注意,优化索引的过程特定于数据库引擎。没有用于调整源索引和目标索引的 DMS 功能。
任务日志中的 SORTER 消息
如果目标端点无法跟上 AWS DMS 写入其中的更改量,则该任务会在复制实例上缓存更改。如果缓存的增长大于内部阈值,则任务将停止从源读取更多的更改。DMS 这样做是为了防止复制实例的存储空间不足,或者在读取大量待处理事件时任务停滞不前。
要解决此问题,请查看 CloudWatch 日志中是否有类似于以下任意内容的消息:
[SORTER ]I: Reading from source is paused. Total disk usage exceeded the limit 90% (sorter_transaction.c:110)
[SORTER ]I: Reading from source is paused. Total storage used by swap files exceeded the limit 1048576000 bytes (sorter_transaction.c:110)
如果您的日志包含的消息与第一条消息类似,请禁用该任务的所有跟踪日志记录,并增加复制实例存储空间。有关增加复制实例存储空间的信息,请参阅 修改复制实例。
如果日志包含的消息与第二条消息类似,请执行以下操作:
数据库锁定
如果应用程序访问 AWS DMS 用作复制目标的数据库,则应用程序可能会锁定 DMS 尝试访问的表。这会导致锁争用。由于 DMS 按照更改在源数据库上的发生顺序将更改写入目标数据库,因此由于锁争用而导致写入一个表出现延迟,会导致写入所有表出现延迟。
要排除此问题,请查询目标数据库以检查锁争用是否在阻止 DMS 写入事务。如果目标数据库阻止 DMS 写入事务,请执行以下一项或多项操作:
重构查询以更频繁地提交更改。
修改您的锁定超时设置。
对表进行分区以尽可能减少锁争用。
请注意,优化锁争用的过程特定于数据库引擎。没有可用于调整锁争用的 DMS 功能。
LOB 查找缓慢
AWS DMS 复制大型对象(LOB)列时,它会在向目标写入更改之前对源执行查找。这种查找通常不会在目标上造成任何延迟,但是如果源数据库由于锁定而导致查找的延迟,则可能会出现目标延迟峰值。
这个问题通常很难诊断。要排除此问题,请在任务日志上启用详细调试,并比较 DMS LOB 查找调用的时间戳。有关启用详细调试的信息,请参阅查看和管理 AWS DMS 任务日志。
要修复这一问题,请尝试以下操作:
提高源数据库上的 SELECT 查询性能。
调整 DMS LOB 设置。有关调整 LOB 设置的更多信息,请参阅 迁移大型二进制对象 (LOB)。
多可用区、审计日志记录和备份
对于 Amazon RDS 目标,在以下情况中目标延迟可能会增加:
备份
启用多可用区(Multi-AZ)后
启用数据库日志记录后,例如审计日志或慢速查询日志。
这些问题通常很难诊断。要排除这些问题,请监控在 Amazon RDS 维护时段或数据库负载繁重期间,延迟的周期性峰值。
要修复这些问题,请尝试以下操作:
如果可能,在短期迁移期间,请禁用多可用区、备份或日志记录。
将维护时段重新安排到活动量较低的时段。