我将数据从源引擎迁移到目标引擎时使用的是 AWS Database Migration Service(AWS DMS)。但是任务失败了,也没有提示任何错误。
简短描述
当 AWS DMS 任务失败时,任务日志会进行记录。任务日志会通过错误消息(]E:)或警告消息(]W:)提供失败原因的信息。在某些情况下可能会出现 AWS DMS 任务失败但未提示任何错误或警告,因此难以进行故障排查。
通常,AWS DMS 任务失败有以下原因:
复制实例上的资源争用
CPU 和内存是迁移任务所需的两个最重要的资源:
- CPU 必须先将源数据类型转换为 AWS DMS 类的数据类型,然后再转换为目标数据类型。
- 因为 AWS DMS 会创建流向源和目标的流,所以内存是必需的。AWS DMS 将信息存储在复制实例内存中的流缓冲区。
内部监控系统监控复制实例时也会使用 CPU 和内存。任何 CPU 或内存争用都可能导致迁移任务失败且不提示错误。
复制实例的“存储已满”状态
如果复制实例存储空间已满,则迁移任务可能失败且不会提示错误。
出现内部错误
内部错误也可能导致 AWS DMS 任务失败且不提示错误。默认情况下记录的任务日志中看不到内部错误。
解决方法
**注意:**如果任务使用非关系数据库管理系统,则可能需要在没有并行设置的情况下运行任务。有关更多信息,请参阅 Target metadata task settings。
查看 DMS、来源和目标日志以了解更多信息。检查任务静默失败后任务日志中最后一次录入的时间。然后,检查与该故障记录同时期的复制实例上的 CPU、内存和磁盘利用率。
如果同时看到低 FreeableMemory 和高 SwapUsage,则复制实例上可能存在内存争用情况。有关更多信息,请参阅 AWS Data Migration Service metrics。
要查看 CloudWatch 指标,请完成以下步骤:
- 打开 AWS DMS 控制台。
- 在导航窗格中,选择数据库迁移任务。
- 选择失败任务的名称。
- 从概述详细信息部分记下复制实例的名称。
- 在导航窗格中,选择复制实例。
- 选择记下的复制实例的名称。
- 在迁移任务指标部分,查看 CPUUtilization、SwapUsage、FreeableMemory 和 FreeStorageSpace 指标。
- 要查看更多详细信息,请将鼠标悬停在指标上,然后选择“更多”选项图标。
- 选择在指标中查看。此操作将打开 CloudWatch 控制台。
在 CloudWatch 控制台中,查看任务失败时的指标利用率。
如果看到 CPU 或内存持续争用的情况,请减少在复制实例上运行的任务数量。要减少任务数量,可以启动新的复制实例,将任务分配给多个复制实例。或者,将复制实例纵向扩展到更大的实例类型。
**注意:**T2 实例能在 CPU 积分用尽后提供基准性能。例如,T2.micro 实例能提供 10% 的基准性能。验证 CPU 利用率时,请将实例类型纳入考量。有关更多信息,请参阅突](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-credits-baseline-concepts.html)具爆发能力的实例的关键概念和定义[。
确定静默失败的来源后,重新启动任务。如果 CPU、内存或磁盘空间不存在争用,则任务失败可能是由于内部错误导致的。要对内部错误进行故障排查,请启用详细调试。查看错误发生之前的日志,然后为相关日志启用详细调试。例如,如果最后一个日志来自 TARGET_APPLY,则启用 SORTER, TARGET_APPLY 的详细调试。开启详细调试后,重新启动任务,然后查看任务日志,确定任务失败的原因。
**注意:**失败可能是由于验证问题引起,而非您的数据问题。要测试验证组件是否为失败原因,请运行一个仅限验证的任务,以查看是否出现问题。
相关信息
Troubleshooting migration tasks in AWS Database Migration Service
如何从 AWS 获得技术支持?
为什么我的 AWS DMS 复制数据库实例处于存储已满状态?