如何提高包含 LOB 数据的 AWS DMS 任务的速度?

上次更新时间:2020 年 6 月 1 日

我的 AWS Database Migration Service (AWS DMS) 迁移任务的速度很慢。我该如何提高包含大型对象 (LOB) 数据的 AWS DMS 任务的速度?

简短描述

在迁移 LOB 数据时 AWS DMS 可提供下列选项:

  • 完全 LOB 模式
  • 有限 LOB 模式
  • 内联 LOB 模式

解决方法

完全 LOB 模式

当使用完全 LOB 模式时,AWS DMS 迁移 LOB 而不考虑其大小。由于 AWS DMS 不知道需要迁移的 LOB 数据的大小,因此 AWS DMS 每次迁移一个 LOB,这可能会降低任务的速度。虽然迁移速度较慢,但优势是数据不会被截断。为了提高使用完全 LOB 模式且包含多个表的任务的性能,您需要确定数据库中最大 LOB 的大小。然后,如果最大 LOB 的大小不过只有几兆字节,则您可以使用有限 LOB 模式。

如果有些 LOB 超过几兆字节,则您可以创建一个单独的 AWS DMS 任务使用完整 LOB 模式。最佳作法是在新复制实例上创建独立任务来单独迁移这些表。

有限 LOB 模式

使用有限 LOB 模式时,您可以指定 LOB 列数据的最大大小。这样将允许 AWS DMS 预分配资源并批量应用 LOB。如果 LOB 列的大小超过您在任务中指定的大小,则 AWS DMS 将会截断数据,然后发送警告到 AWS DMS 日志文件。使用有限 LOB 模式可以提高性能,但是在运行任务之前,您必须确定源上数据的最大 LOB 大小。其次,在使用有限 LOB 模式时必须指定最大 LOB 大小参数。最佳作法是确保您向复制实例分配了足够的内存以处理该任务。

内联 LOB 模式

使用内联 LOB 模式时,您可以通过复制小 LOB 和大 LOB 来迁移 LOB,而不会截断数据或降低任务的速度。首先指定 InlineLobMaxSize 参数的值。仅在 全 LOB 模式被设置为 true 时才可以指定此参数的值。AWS DMS 任务会内联传输小 LOB,这种方式更为高效。然后 AWS DMS 会查询源表,以迁移超过全 LOB 模式中指定大小的 LOB。但内联 LOB 模式仅在满负载阶段工作。

重要提示:在为任务指定任务设置时,您必须设置 InlineLobMaxSize

 {
  "TargetMetadata": {
    "TargetSchema": "abc",
    "SupportLobs": true,
    "FullLobMode": true,
    "LobChunkSize": 64,
    "LimitedSizeLobMode": false,
    "LobMaxSize": 0,
    "InlineLobMaxSize": 32,
    "LoadMaxFileSize": 0,
    "ParallelLoadThreads": 0,
    "ParallelLoadBufferSize": 0,
    "BatchApplyEnabled": false,
    "TaskRecoveryTableEnabled": false,
    "ParallelLoadQueuesPerThread": 0,
    "ParallelApplyThreads": 0,
    "ParallelApplyBufferSize": 0,
    "ParallelApplyQueuesPerThread": 0
  }