如何排查 AWS DMS 任务源延迟高的问题?

上次更新日期:2022 年 10 月 17 日

我发现我的 AWS Database Migration Service(AWS DMS)任务源延迟高。是什么原因导致迁移期间的源延迟?

简短描述

您可以使用 Amazon CloudWatch 指标来监控您的 AWS DMS 任务。在迁移过程中,您可能会在 AWS DMS 任务的持续复制阶段 — 即变更数据捕获(CDC)阶段 — 看到源延迟。您可以使用针对 CDCLatencySourceCloudWatch 服务指标来监控 AWS DMS 任务的源延迟。在以下情况下,您可能会看到 AWS DMS 任务的源延迟:

  • 源数据库的资源有限。
  • AWS DMS 复制实例的资源有限。
  • 源数据库与 AWS DMS 复制实例之间的网络速度慢。
  • AWS DMS 在持续复制期间读取来自源数据库事务日志的新更改。
  • AWS DMS 任务设置不足或者正在迁移大型对象 (LOB)。
  • 用于 AWS DMS 任务的 Oracle 源数据库正在使用 LogMiner 执行持续复制。

解决方法

源数据库的资源有限。对源数据库引擎使用本机监控是一种最佳实践。使用本机监控可确保您的数据库不会遇到性能瓶颈,例如内存争用或 I/O 饱和。

AWS DMS 复制实例的资源有限。监控复制实例指标(例如 CPUUtilizationFreeStorageSpaceFreeableMemory)。确认复制实例具有足够的资源来管理您的任务。

源数据库与 AWS DMS 复制实例之间的网络速度慢。由于设计的原因,单个 AWS DMS 任务不能使用全部网络带宽。如果某个繁忙的生产数据库进行了很多更改,您可能需要增加网络带宽。例如,使用 AWS Direct Connect 连接

AWS DMS 在持续复制期间读取来自源数据库事务日志的新更改。根据源数据库引擎的不同,源事务日志还可能存在未提交的数据。在持续复制期间,AWS DMS 从事务日志中读取传入的更改。但 AWS DMS 仅将已提交的更改转发到目标。这最终会导致源延迟。监控 CDC 的复制任务指标以及 SOURCE_CAPTURE 组件的详细调试日志记录,以确认任务正在进行中。

但在源数据库写入大型数据集并运行较少的提交时,AWS DMS 会继续从事务日志读取。在整个事务提交之前,AWS DMS 不会在目标上应用更改。这也可能导致源延迟。由于源延迟增加,目标延迟也会增加。

AWS DMS 任务设置不足或者正在迁移大型对象(LOB)。在持续复制期间,AWS DMS 会分两个阶段来迁移 LOB 数据。首先,AWS DMS 会用除含有 LOB 的列以外的所有列在目标表中创建一个新行。然后,AWS DMS 会更新含有 LOB 的行。如果您的某个源数据库经常更新含有 LOB 列的表,则您可能会看到源延迟。有关更多信息,请参阅迁移大型二进制对象(LOB)

如果任务的表太多,或者多个表包含 LOB 列,则将您的任务拆分为多个任务。如果您有几组表不参与常见事务,则将迁移分为多个任务。这有助于提高性能。事务一致性在任务中得到维护,因此重点是单独任务中的表不参与常见事务。此外,每个任务都会独立读取事务流,所以不要对源数据库施加太大的压力。有关更多信息,请参阅 AWS Database Migration Service 的最佳实践

用于 AWS DMS 任务的 Oracle 源数据库正在使用 LogMiner 执行持续复制。如果您的源数据库生成大量重做日志,则使用二进制读取器方法进行持续复制。如果源数据库使用 Oracle Automatic Storage Management(ASM),也可以使用此方法。有关更多信息,请参阅将 Oracle LogMiner 或 AWS DMS Binary Reader 用于 CDC


这篇文章对您有帮助吗?


您是否需要账单或技术支持?