为什么我的 AWS DMS 任务失败但未提示错误?

上次更新时间:2019 年 9 月 27 日

我正在使用 AWS Database Migration Service (AWS DMS) 将我的数据从源引擎迁移到目标引擎。但是,任务失败却未提示任何错误。如何解决此问题?

简短描述

当 AWS DMS 任务失败时,任务日志可通过错误消息 (]E:) 或 警告消息 (]W:) 提供关于失败原因的信息。在有些情况下,AWS DMS 任务可能会失败而不产生任何错误或警告,这可能导致难以排查原因。大多数情况下,这是由下列三个原因之一导致的:

1.复制实例上的资源争用

CPU 和内存是迁移任务所需要的两种最重要的资源:

  • 需要 CPU 才能将源数据类型转换成 AWS DMS 类数据类型,然后最终转换成目标数据类型。
  • 需要内存是因为 AWS DMS 创建了至源和目标的流。AWS DMS 将信息存储在复制实例上的内存缓冲区内的流中。

内部监控系统也使用 CPU 和内存来监控复制实例。任何争用 CPU 或内存的行为都可能会导致迁移任务失败,且系统不会提示。

2.复制实例上的“存储已满”状态

如果复制实例存储已满,迁移任务可能会失败,且系统不会提示错误。更多信息,请参阅为什么我的 AWS DMS 复制实例状态为存储已满?

3.发生了内部错误

如果发生在默认记录的任务日志中不可见的内部错误,AWS DMS 任务也可能会失败且系统不会提示。

解决方法

首先,检查任务失败且系统未提示后任务日志中出现的最后一个条目的时间。然后,验证大约在记录故障的时间前后复制实例上的 CPU、内存和磁盘使用率。

如果您看同时存在低 FreeableMemory 和高 SwapUsage,则表明复制实例上可能存在内存争用。请务必检查两个指标。更多信息,请参阅数据迁移服务指标

要查看 CloudWatch 指标,请执行以下步骤:

  1. 打开 AWS DMS 控制台并从导航窗格中选择数据库迁移任务。 
  2. 选择失败的任务的名称。
    概述详细信息部分中记下复制实例的名称。
  3. 从导航窗格中选择复制实例
  4. 选择在第 3 步中记下的复制实例名称。
  5. 迁移任务指标部分中,您可以查看 CPUUtilizationSwapUsageFreeableMemoryFreeStorageSpace 指标。
  6. 要查看更多详细信息,请将鼠标指针悬停在指标上方,并选择更多选项图标(三个垂直点)。 
  7. 选择查看指标

这将打开 CloudWatch 控制台,在这里您可以查看任务失败时的利用率指标。

如果您看到一直存在 CPU 或内存争用,请考虑减少的复制实例上运行的任务数量。为此,您可以启动新复制实例并将任务分配到多个复制实例。或者,请考虑将复制实例的规模扩展为更大的实例类型。

注意:T2 实例在 CPU 积分用尽后提供基准性能。例如,T2.micro 实例提供 10% 的基准性能。因此,请考虑使用的实例类型,并相应地验证 CPU 使用率。关于 CPU 积分和基准性能的更多信息,请参阅可突增性能实例的 CPU 积分和基准性能

确定静默失败的来源后,请重新启动任务。

如果没有 CPU、内存或磁盘空间争用,则任务最有可能是因为内部错误而失败。要排查内部错误,应对所有五个日志组件启用详细调试。启用详细调试后,重新启动任务并查看任务日志以确定任务失败的原因。