如何故障排除 Amazon Redshift 切换到逐一模式的问题?

1 分钟阅读
0

我想使用 AWS Database Migration Service(AWS DMS)任务将数据迁移到 Amazon Redshift。但是我的任务存在延迟或数据不一致问题,我看到一些日志条目,例如:“XXXXBulk apply operation failed.Trying to execute bulk statements in 'one-by-one' mode XXXXX”。

简述

Amazon Redshift 是一个在线分析处理(OLAP)数据仓库,出于资源消耗的原因,它不适合频繁的事务。默认情况下,AWS DMS 使用批量应用模式来批量处理更改。如果 Redshift 以逐一模式运行,则 DMS 任务不会对目标应用更改,从而导致数据不一致或延迟问题。当您使用批量应用模式时,AWS DMS 会执行以下操作:

  1. 批量应用设置控制的批次中收集更改。
  2. 创建净更改表,其中包含该批次中应用到目标实例的所有更改。
  3. 使用一种汇总事务并批量应用于目标的算法。

当将数据复制到 Amazon Redshift 的迁移任务无法应用某个批次时,AWS DMS 不会让整个批次都失败。AWS DMS 会分解该批次,并切换到逐一模式来应用事务。当 AWS DMS 遇到导致批次失败的事务时,它会将该事务记录到 Amazon Redshift 目标上的 awsdms_apply_exceptions 表中。然后,AWS DMS 逐一应用该批次中的其他事务,直到该批次中的所有事务都应用到目标。最后,AWS DMS 会将新批次切换回批量应用模式,并继续使用批量应用,直到遇到另一个批次失败。

解决方案

要查看您的批次是否失败并且 AWS DMS 是否使用了逐一模式,请查看 AWS DMS 任务日志。每次批次失败且 AWS DMS 切换到逐一模式时,您都会看到以下日志条目:

"[TARGET_APPLY ]I: Bulk apply operation failed.Trying to execute bulk statements in 'one-by-one' mode (bulk_apply.c:2175)"

发生这种情况时,AWS DMS 会按顺序将事务应用到目标,直到 AWS DMS 遇到批次中的任何事务出现问题。如果 AWS DMS 遇到问题,它会记录相关事务,您会看到类似于以下条目的日志条目:

"[TARGET_APPLY ]W: Source changes that would have had no impact were not applied to the target database.Refer to the 'awsdms_apply_exceptions' table for details. (endpointshell.c:5984)"

**注意:**除非您在 AWS DMS 任务设置中指定控制表架构,否则默认情况下,awsdms_apply_exceptions 表是在公共架构中创建的。

在 AWS DMS 记录相关事务后,它会将该批次中所有事务应用到目标。然后,AWS DMS 再次切换到批量应用。在您的日志中,您会看到一条类似于以下内容的消息:

"[TARGET_APPLY ]I: Switch back to bulk apply mode (bulk_apply.c:4751)"

您在在线事务处理(OLTP)数据库中运行的事务更改可能会影响 Amazon Redshift 的性能。当批量应用失败时,AWS DMS 会切换到逐一模式。在 AWS DMS 以逐一模式运行事务的时间内,目标延迟会增加。在 AWS DMS 切换回批量应用后,目标延迟会减少。

要解决此问题,请连接到 Amazon Redshift 目标。然后,运行以下命令从 awsdms_apply_exceptions 表中获取数据,以识别导致批次失败的查询:

select \* from public.awsdms\_apply\_exceptions order by 4 desc;

找到导致批次失败的查询后,请检查相关错误。解决此问题,使任务不会切换到逐一模式。

相关信息

Debugging your AWS DMS migrations: What to do when things go wrong

Using an Amazon Redshift database as a target for AWS Database Migration Service

AWS 官方
AWS 官方已更新 7 个月前