

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 排除目标延迟问题
<a name="CHAP_Troubleshooting_Latency_Target"></a>

本节包含可能导致目标延迟的场景。

**Topics**
+ [索引问题](#CHAP_Troubleshooting_Latency_Target_Indexing)
+ [任务日志中的 SORTER 消息](#CHAP_Troubleshooting_Latency_Target_Sorter)
+ [数据库锁定](#CHAP_Troubleshooting_Latency_Target_Locking)
+ [LOB 查找缓慢](#CHAP_Troubleshooting_Latency_Target_LOB)
+ [多可用区、审计日志记录和备份](#CHAP_Troubleshooting_Latency_Target_MultiAZ)

## 索引问题
<a name="CHAP_Troubleshooting_Latency_Target_Indexing"></a>

在 CDC 阶段，通过在 AWS DMS 目标系统上执行 DML 语句（插入、更新和删除）来复制源上的更改。对于使用 DMS 的异构迁移，源端和目标端在索引优化方面的不同，可能会需要导致花费更长的时间写入目标系统。这会引发目标延迟和性能问题。

要排除此索引问题，请执行以下操作：这些步骤的过程因不同的数据库引擎而异。
+ 监控目标数据库的查询时间。比较目标和源上的查询执行时间可以指明哪些索引需要优化。
+ 为运行缓慢的查询启用日志记录。

要修复长时间运行复制的索引问题，请执行以下操作：
+ 调整源数据库和目标数据库上的索引，使源数据库和目标数据库上具有相似的查询执行时间。
+ 比较源和目标的 DML 查询中使用的二级索引。确保目标上的 DML 性能与源 DML 性能相当或更好。

请注意，优化索引的过程特定于数据库引擎。没有用于调整源索引和目标索引的 DMS 功能。

## 任务日志中的 SORTER 消息
<a name="CHAP_Troubleshooting_Latency_Target_Sorter"></a>

如果目标端点无法跟上 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)
```

如果您的日志包含的消息与第一条消息类似，请禁用该任务的所有跟踪日志记录，并增加复制实例存储空间。有关增加复制实例存储空间的信息，请参阅[修改复制实例](CHAP_ReplicationInstance.Modifying.md)。

如果日志包含的消息与第二条消息类似，请执行以下操作：
+ 如果包含大量事务或长时间运行 DML 操作的表，与任务中的其他表没有任何依赖关系，则将其移至单独的任务中。
+ 增加 `MemoryLimitTotal` 和 `MemoryKeepTime` 的设置，使事务在内存中保留更长的时间。如果延迟一直保持较高，则这种方法没有帮助，但它有助于在短暂的交易量突发期间降低延迟。有关这些任务设置的信息，请参阅[更改处理优化设置](CHAP_Tasks.CustomizingTasks.TaskSettings.ChangeProcessingTuning.md)。
+ 通过将 `BatchApplyEnabled` 设置为 `true`，评估是否可以对事务使用批量应用。有关 `BatchApplyEnabled` 设置的信息，请参阅[目标元数据任务设置](CHAP_Tasks.CustomizingTasks.TaskSettings.TargetMetadata.md)。

## 数据库锁定
<a name="CHAP_Troubleshooting_Latency_Target_Locking"></a>

如果应用程序访问用作复制目标的数据库， AWS DMS 则该应用程序可能会锁定 DMS 正在尝试访问的表。这会导致锁争用。由于 DMS 按照更改在源数据库上的发生顺序将更改写入目标数据库，因此由于锁争用而导致写入一个表出现延迟，会导致写入所有表出现延迟。

要排除此问题，请查询目标数据库以检查锁争用是否在阻止 DMS 写入事务。如果目标数据库阻止 DMS 写入事务，请执行以下一项或多项操作：
+ 重构查询以更频繁地提交更改。
+ 修改您的锁定超时设置。
+ 对表进行分区以尽可能减少锁争用。

请注意，优化锁争用的过程特定于数据库引擎。没有可用于调整锁争用的 DMS 功能。

## LOB 查找缓慢
<a name="CHAP_Troubleshooting_Latency_Target_LOB"></a>

 AWS DMS 复制大型对象 (LOB) 列时，它会在向目标写入更改之前对源执行查找。这种查找通常不会在目标上造成任何延迟，但是如果源数据库由于锁定而导致查找的延迟，则可能会出现目标延迟峰值。

这个问题通常很难诊断。要排除此问题，请在任务日志上启用详细调试，并比较 DMS LOB 查找调用的时间戳。有关启用详细调试的信息，请参阅[查看和管理 AWS DMS 任务日志](CHAP_Monitoring.md#CHAP_Monitoring.ManagingLogs)。

要修复这一问题，请尝试以下操作：
+ 提高源数据库上的 SELECT 查询性能。
+ 调整 DMS LOB 设置。有关调整 LOB 设置的更多信息，请参阅[迁移大型二进制对象 (LOBs)](CHAP_BestPractices.md#CHAP_BestPractices.LOBS)。

## 多可用区、审计日志记录和备份
<a name="CHAP_Troubleshooting_Latency_Target_MultiAZ"></a>

对于 Amazon RDS 目标，在以下情况中目标延迟可能会增加：
+ 备份
+ 启用多可用区（Multi-AZ）后
+ 启用数据库日志记录后，例如审计日志或慢速查询日志。

这些问题通常很难诊断。要排除这些问题，请监控在 Amazon RDS 维护时段或数据库负载繁重期间，延迟的周期性峰值。

要修复这些问题，请尝试以下操作：
+ 如果可能，在短期迁移期间，请禁用多可用区、备份或日志记录。
+ 将维护时段重新安排到活动量较低的时段。