本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon Database Migration Service 的最佳实践
要想尽可能高效地使用 Amazon Database Migration Service (Amazon DMS),请参阅此部分中有关以最有效方式迁移数据的建议。
主题
Amazon Database Migration Service 的迁移规划
在规划使用 Amazon Database Migration Service 进行数据库迁移时,请考虑以下事项:
-
将源数据库和目标数据库连接到Amazon DMS复制实例,你配置一个网络。这样做就像连接两个一样简单Amazon与您的复制实例位于同一虚拟私有云(VPC)中的资源。它可以包括更复杂的配置,例如通过虚拟专用网络 (VPN) 将本地数据库连接到 Amazon RDS 数据库实例。有关更多信息,请参阅 数据库迁移的网络配置。
-
源端点和目标端点— 确保您知道源数据库中的哪些信息和表需要迁移到目标数据库。Amazon DMS支持基本架构迁移,包括创建表和主键。但是,Amazon DMS不会在目标数据库中自动创建二级索引、外键、用户帐户等。根据您的源和目标数据库引擎的不同,您可能需要为源数据库或目标数据库设置补充日志记录或修改其他设置。有关更多信息,请参阅 数据迁移的源 和 数据迁移的目标。
架构和代码迁移–Amazon DMS不执行架构或代码转换。你可以使用 Oracle SQL Developer、MySQL Workbench 和 pgadMin III 等工具来转换你的架构。要将现有架构转换为其他数据库引擎,可以使用Amazon Schema Conversion Tool(Amazon SCT)。它可以创建目标架构,也可以生成和创建整个架构:表、索引、视图等。您还可以使用此工具来将 PL/SQL 或 TSQL 转换为 PgSQL 和其他格式。有关Amazon SCT,请参阅Amazon SCT用户指南.
不支持的数据类型— 确保您可以将源数据类型转换为目标数据库的等效数据类型。有关支持的数据类型的更多信息,请参阅数据存储的源或目标部分。
-
诊断支持脚本结果— 在计划迁移时,我们建议您运行诊断支持脚本。利用这些脚本的结果,您可以预先找到有关潜在迁移失败的信息。
如果您的数据库有支持脚本可用,请使用下一节中相应脚本主题中的链接下载该脚本。验证并查看脚本后,您可以根据脚本主题中描述的过程在本地环境中运行该脚本。脚本运行完成后,您可以查看结果。我们建议将运行这些脚本作为任何故障排除工作的第一步。结果在使用时可能很有用Amazon Web Services Support团队。有关更多信息,请参阅 在中使用诊断支持脚本Amazon DMS。
-
迁移前评估— 一个迁移前评估评估数据库迁移任务的指定组件,以帮助识别可能阻碍迁移任务按预期运行的任何问题。通过使用此评估,您可以在运行新的或修改的任务之前发现潜在的问题。有关使用迁移前评估的更多信息,请参阅为任务启用和使用迁移前评估.
转换架构
Amazon DMS 不执行架构或代码转换。如果要将现有架构转换为其他数据库引擎,可以使用Amazon SCT.Amazon SCT将源对象、表、索引、视图、触发器和其他系统对象转换为目标数据定义语言 (DDL) 格式。您还可以使用Amazon SCT将大部分应用程序代码(例如 PL/SQL 或 TSQL)转换为等效的目标语言。
你可以得到Amazon SCT可从以下网址免费下载Amazon. 有关 Amazon SCT 的更多信息,请参阅 Amazon SCT 用户指南。
如果您的源端点和目标端点位于同一个数据库引擎上,则可以使用诸如 Oracle SQL Developer、MySQL Workbench 或 PgAdmin4 来移动你的架构。
查核Amazon DMS公开文档
我们强烈建议你仔细阅读Amazon DMS首次迁移之前的源端点和目标端点的公共文档页面。本文档可以帮助您确定迁移的先决条件,并在开始之前了解当前的限制。有关更多信息,请参阅 使用Amazon DMS 终端节点。
在迁移期间,公共文档可以帮助您解决以下任何问题Amazon DMS. 文档中的疑难解答页面可以帮助您同时使用两者来解决常见问题Amazon DMS和选定的端点数据库。有关更多信息,请参阅 排除 Amazon Database Migration Service 中的迁移任务问题。
运行概念验证
为了帮助在数据库迁移的早期阶段发现环境问题,我们建议您进行一次小规模的测试迁移。这样做还可以帮助您设置更真实的迁移时间表。此外,您可能需要运行全面的测试迁移来衡量是否Amazon DMS可以通过网络处理数据库的吞吐量。在此期间,我们建议对您的初始满负载和持续复制进行基准测试和优化。这样做可以帮助您了解网络延迟并衡量整体性能。
此时,您还有机会了解您的数据概况以及数据库的大小,包括以下内容:
-
有多少张桌子是大、中、小的。
-
如何Amazon DMS处理数据类型和字符集转换。
-
有多少表有大型对象 (LOB) 列。
-
运行测试迁移需要多长时间。
改进 Amazon DMS 迁移的性能
Amazon DMS 迁移的性能受多种因素影响:
源上的资源可用性。
可用网络吞吐量。
复制服务器的资源容量。
目标接收变化的能力。
源数据的类型和分布。
要迁移的对象的数量。
可以使用下面所述的部分或全部最佳实践来改进性能。你能否使用其中一种做法取决于你的具体用例。你可以发现以下一些限制:
- 配置合适的复制服务器
-
Amazon DMS是一项在 Amazon EC2 实例上运行的托管服务。该服务连接到源数据库,读取源数据,格式化数据以供目标数据库使用,并将数据加载到目标数据库中。
大部分这种处理发生在内存中。但是,大型事务可能需要部分缓冲到磁盘上。缓存事务和日志文件也会写入磁盘。在以下部分中,您可以了解在选择复制服务器时应考虑的事项。
- CPU
-
Amazon DMS专为异构迁移而设计,但它也支持同构迁移。要执行同构迁移,请首先将每个源数据类型转换为其等效类型Amazon DMS数据类型。然后分别转换Amazon DMS将数据键入到目标数据类型。您可以在中找到每个数据库引擎的这些转换的参考资料Amazon DMS用户指南.
对于Amazon DMS要以最佳方式执行这些转换,转换时必须有 CPU 可用。CPU 过载和没有足够的 CPU 资源会导致迁移缓慢,这也可能导致其他副作用。
- 复制实例类
-
一些较小的实例类足够用于测试服务或小型迁移。如果您的迁移涉及大量表,或者您打算运行多个并发复制任务,请考虑使用其中一个较大的实例。更大的实例可能是个好主意,因为该服务会消耗大量的内存和 CPU。
T2 类型实例旨在提供适度的基准性能,并能够根据您工作负载的需要实现性能的显著突增。它们旨在用于不经常或不持续使用完整 CPU、但偶尔需要突增性能的工作负载。T2 实例非常适合通用工作负载,例如 Web 服务器、开发人员环境和小型数据库。如果您要对缓慢迁移进行故障排除并使用 T2 实例类型,请查看 CPU 使用率主机指标。它可以告诉你是否突破了该实例类型的基准。
C4 实例类旨在为计算机密集型工作负载交付最高级别的处理器性能。它们实现了显著提高每秒数据包 (PPS) 性能、降低网络抖动和减少网络延迟。Amazon DMS可能会占用 CPU 密集型,尤其是在执行异构迁移和复制(例如从 Oracle 迁移到 PostgreSQL)时。针对这些情况,C4 实例是理想选择。
R4 实例类针对内存密集型工作负载优化了内存。使用正在进行的高吞吐量事务系统的迁移或复制Amazon DMS有时会占用大量 CPU 和内存。R4 实例的每个 vCPU 包含更多内存。
- Amazon DMS支持 R5 和 C5 实例类
-
R5 实例类是内存优化型实例,旨在让处理内存中的大型数据集的工作负载实现快速性能。使用正在进行的高吞吐量事务系统的迁移或复制Amazon DMS有时会占用大量 CPU 和内存。R5 实例为每个 vCPU 提供的内存比 R4 多 5%,最大容量提供 768 GiB 的内存。此外,与 R4 相比,R5 实例每改进 GiB 的价格为 10%,CPU 性能提高了大约 20%。
C5 实例类针对计算密集型工作负载进行了优化,并以较低的每计算比率价格提供经济实惠的高性能。它们显著提高了网络性能。弹性网络适配器 (ENA) 为 C5 实例提供高达 25 Gbps 的网络带宽和高达 14 Gbps 的 Amazon EBS 专用带宽。Amazon DMS可能会占用 CPU 密集型,尤其是在执行异构迁移和复制(例如从 Oracle 迁移到 PostgreSQL)时。在这些情况下,C5 实例可能是一个不错的选择。
- 存储
-
根据实例类别的不同,您的复制服务器提供 50 GB 或 100 GB 的数据存储空间。此存储用于存储日志文件和加载期间收集的任何缓存更改。如果您的源系统繁忙或需要大量事务,则可能需要增加存储空间。如果您在复制服务器上运行多个任务,则可能还需要增加存储空间。但是,默认金额通常就足够了。
中的所有存储卷Amazon DMS是 GP2 或通用固态硬盘 (SSD)。GP2 卷的基本性能为每秒三次 I/O 操作 (IOPS),并且能够在积分基础上突增至 3,000 IOPS。根据经验,请查看
ReadIOPS
和WriteIOPS
复制实例的指标。确保这些值的总和不会超过该卷的基本性能。 - 多可用区
-
选择多可用区实例可以保护您的迁移免受存储故障的影响。大多数迁移都是暂时的,不打算长时间运行。如果您使用Amazon DMS出于持续复制的目的,选择多可用区实例可以在出现存储问题时提高可用性。
在 FULL LOAD 期间使用单可用区或多可用区复制实例并进行故障转移或主机更换时,满负载任务预计会失败。对于其余未完成或处于错误状态的表,您可以从故障点重新启动任务。
- parallel 加载多个表
默认情况下,Amazon DMS 一次加载八个表。在使用非常大的复制服务器时,例如 dms.c4.xlarge 或更大的实例,您可以稍微提升此值来实现一些性能改进。但是,某些时候增加此并行度会降低性能。如果您的复制服务器相对较小,例如 dms.t2.medium,则建议您减少并行加载的表数量。
要在... 中更改这个数字Amazon Web Services Management Console,打开控制台,选择任务,选择创建或修改任务,然后选择高级设置. 在 Tuning Settings (优化设置) 下,更改 Maximum number of tables to load in parallel (并行加载的最大表数) 选项。
要更改此数字,请使用Amazon CLI,更改
MaxFullLoadSubTasks
在参数下TaskSettings
.- 使用parallel 满载
-
你可以根据分区和子分区使用来自 Oracle、微软 SQL Server、MySQL、Sybase 和 IBM Db2 LUW 源的并parallel 加载。这样做可以改善整体满负荷持续时间。此外,在运行时Amazon DMS迁移任务,您可以加快大型表或分区表的迁移。为此,请将表拆分为多个段,然后在同一个迁移任务中parallel 加载这些段。
要使用parallel 加载,请创建类型为的表映射规则
table-settings
用parallel-load
选项。在内部table-settings
规则,为要parallel 加载的一个或多个表指定选择标准。要指定选择标准,请设置type
元素parallel-load
更改为以下任一设置:-
partitions-auto
-
subpartitions-auto
-
partitions-list
-
ranges
-
none
有关这些设置的更多信息,请参阅表和集合设置规则和操作.
-
- 使用索引、触发器和引用完整性约束
索引、触发器和引用完整性约束可能会影响您的迁移性能,并导致迁移失败。它们如何影响迁移取决于您的复制任务是满负荷任务还是持续复制(变更数据捕获或 CDC)任务。
对于完全加载任务,建议您删除主键索引、二级索引、引用完整性约束和数据操作语言 (DML) 触发器。或者你可以将它们的创建推迟到满载任务完成之后。在执行满载任务期间您不需要索引,如果存在索引,则会产生维护开销。由于完整加载任务一次加载一组表,这会违反引用完整性约束。同样,插入、更新和删除触发器也可能导致错误,例如,如果为先前批量加载的表触发了行插入。由于增加了处理量,其他类型的触发器也会影响性能。
如果您的数据量相对较小,并且额外的迁移时间与您无关,则可以在执行满负载任务之前构建主键和二级索引。务必关闭参照完整性约束和触发器。
对于满负荷加 CDC 任务,我们建议您在 CDC 阶段之前添加二级索引。因为Amazon DMS使用逻辑复制,请确保支持 DML 操作的二级索引到位,以防止进行全表扫描。您可以在 CDC 阶段之前暂停复制任务,以便在重新启动任务之前建立索引和创建参照完整性约束。
你应该在切换之前立即启用触发器。
- 关闭备份和事务日志
迁移到 Amazon RDS 数据库时,最好关闭目标上的备份和多可用区,直到准备好切换。同样,在迁移到 Amazon RDS 以外的系统时,在切换之前关闭目标系统上的所有日志记录通常是个好主意。
- 使用多个任务
有时候,为单个迁移使用多个任务可以提升性能。如果您有一组不参与常见事务的表,则可以将迁移分为多个任务。 在任务中保持事务一致性,因此不同任务中的表不要参与常见事务,这一点很重要。此外,每个任务都会独立读取事务流,因此请注意不要对源数据库施加太大stress。
您可以使用多个任务来创建单独的复制流。通过这样做,您可以并行化源上的读取、复制实例上的进程以及对目标数据库的写入。
- 优化更改处理
默认情况下,Amazon DMS 在事务模式下处理更改,这可保护事务完整性。如果您可以承受事务完整性的临时失效,可以改为使用批量优化应用 选项。该选项有效分组事务并批量应用,以实现提高效率的目的。使用批量优化的应用选项几乎总是会违反参照完整性限制。因此,我们建议您在迁移过程中关闭这些限制,并在直接转换过程中再次将其打开。
使用您自己的本地名称服务器
通常,一个Amazon DMS复制实例使用 Amazon EC2 实例中的域名系统 (DNS) 解析器解析域终端节点。但是,如果您使用 Amazon Route 53 解析器,则可以使用自己的本地名称服务器来解析某些终端节点。使用此工具,您可以在本地和本地之间进行查询Amazon使用入站和出站端点、转发规则和私有连接。使用本地域名服务器的好处包括在防火墙后提高安全性和易用性。
如果您有入站终端节点,则可以使用源自本地的 DNS 查询来解析Amazon-托管域。要配置终端节点,请在要提供解析器的每个子网中分配 IP 地址。在本地 DNS 基础设施与之间建立连接Amazon,使用Amazon Direct Connect或虚拟专用网络 (VPN)。
出站终端节点连接到您的本地名称服务器。名称服务器仅授予对允许列表中包含并在出站终端节点中设置的 IP 地址的访问权限。名称服务器的 IP 地址是目标 IP 地址。当您为出站终端节点选择安全组时,请选择复制实例使用的相同安全组。
要将选定的域名转发到域名服务器,请使用转发规则。一个出站终端节点可以处理多个转发规则。转发规则的范围是您的虚拟私有云(VPC)。通过使用与 VPC 关联的转发规则,您可以在AmazonCloud。从这个逻辑上隔离的部分中,你可以启动Amazon虚拟网络中的资源。
您可以将本地 DNS 基础设施中托管的域配置为设置出站 DNS 查询的条件转发规则。当对其中一个域进行查询时,规则会触发尝试将 DNS 请求转发到使用这些规则配置的服务器。再说一遍,私人连接结束了Amazon Direct Connect或者需要 VPN。
下图显示了 Route 53 Resolver 架构。

有关 Route 53 DNS 解析程序的更多信息,请参阅Route 53 Resolver 入门在Amazon Route 53 开发.
将Amazon Route 53 解析程序与Amazon DMS
您可以为创建本地名称服务器Amazon DMS使用以下方法解析端点Amazon Route 53 Resolver
为创建本地名称服务器Amazon DMS基于Route 53
登录 Amazon Web Services Management Console,并通过以下网址打开 Route 53 控制台:https://console.aws.amazon.com/route53/
。 -
在 Route 53 控制台上,选择Amazon要配置 Route 53 解析程序的区域。Route 53 解析器特定于某个区域。
选择查询方向:入站和/或出站。
提供您的入站查询配置:
输入终端节点名称并选择 VPC。
从 VPC 内分配一个或多个子网(例如,选择两个子网以确保可用性)。
分配特定 IP 地址用作终端节点,或者让 Route 53 解析器自动分配这些地址。
为本地域创建规则,以便 VPC 内的工作负载可以将 DNS 查询路由到您的 DNS 基础设施。
为您的本地 DNS 服务器输入一个或多个 IP 地址。
提交您的规则。
创建所有内容后,您的 VPC 与您的入站和出站规则相关联,并且可以开始路由流量。
有关 Route 53 Resolver 的更多信息,请参阅Route 53 Resolver 入门在Amazon Route 53 开发.
迁移大型二进制对象 (LOB)
一般而言,Amazon DMS分两个阶段迁移 LOB 数据:
Amazon DMS 会在目标表中创建一个新行,并用除相关 LOB 值之外的所有数据来填充该行。
Amazon DMS 使用 LOB 数据更新目标表中的行。
LOB 的这种迁移过程要求,在迁移期间,目标表上的所有 LOB 列都必须可为空。即使源表上的 LOB 列不可为空,也是如此。如果 Amazon DMS 创建目标表,默认情况下会将 LOB 列设置为可为空值。在某些情况下,您可以使用其他机制(例如导入或导出)创建目标表。在这种情况下,在开始迁移任务之前,请确保 LOB 列可为空。
此要求有一个例外情况。假设您执行从 Oracle 源到 Oracle 目标的同类迁移,并且您选择 Limited Lob mode (受限 LOB 模式)。在这种情况下,将一次填充整行,包括任何 LOB 值。对于此类情况,如果需要,Amazon DMS 可以使用不可为空的约束创建目标表 LOB 列。
使用受限 LOB 模式
Amazon DMS当您的迁移包含 LOB 值时,使用两种方法来平衡性能和便利性:
Limited LOB mode (受限 LOB 模式) 迁移所有最大为用户指定的大小限制 (默认为 32 KB) 的 LOB 值。大于此大小限制的 LOB 值必须手动迁移。Limited LOB mode (受限 LOB 模式) 是所有迁移任务的默认值,通常提供最佳性能。但是,应确保最大 LOB 大小参数设置正确。将此参数设置为所有表的最大 LOB 大小。
Full LOB mode (完整 LOB 模式) 迁移表中的所有 LOB 数据,而不受大小限制。Full LOB mode (完整 LOB 模式) 提供了移动表中所有 LOB 数据的便利性,不过该过程对性能可能会有显著影响。
对于某些数据库引擎(如 PostgreSQL),Amazon DMS 处理 JSON 数据类型的方式类似于 LOB。确保您选择了有限的 LOB 模式,最大 LOB 大小选项设置为不会导致 JSON 数据被截断的值。
Amazon DMS 完全支持使用大对象数据类型(BLOB、CLOB 和 NCLOB)。以下源终端节点具有完整的 LOB 支持:
Oracle
Microsoft SQL Server
ODBC
以下目标终端节点具有完整的 LOB 支持:
Oracle
Microsoft SQL Server
以下目标终端节点具有有限的 LOB 支持。对于此目标终端节点,您不能使用无限制的 LOB 大小。
Amazon Redshift
-
Amazon S3
对于具有完整 LOB 支持的终端节点,您还可以为 LOB 数据类型设置大小限制。
提高了 LOB 性能
在迁移 LOB 数据时,您可以指定以下不同的 LOB 优化设置。
每桌 LOB 设置
使用每表 LOB 设置,您可以覆盖部分或全部表的任务级 LOB 设置。要实现此目的,应将lob-settings
在你的table-settings
规则。以下是包含一些大型 LOB 值的示例表。
SET SERVEROUTPUT ON CREATE TABLE TEST_CLOB ( ID NUMBER, C1 CLOB, C2 VARCHAR2(4000) ); DECLARE bigtextstring CLOB := '123'; iINT; BEGIN WHILE Length(bigtextstring) <= 60000 LOOP bigtextstring := bigtextstring || '000000000000000000000000000000000'; END LOOP; INSERT INTO TEST_CLOB (ID, C1, C2) VALUES (0, bigtextstring,'AnyValue'); END; / SELECT * FROM TEST_CLOB; COMMIT
接下来,创建迁移任务并使用新的 LOB 处理方式修改表的 LOB 处理lob-settings
规则。这些区域有:bulk-max-siz
值决定了最大 LOB 大小 (KB)。如果它大于指定的大小,则会被截断。
{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "HR", "table-name": "TEST_CLOB" }, "rule-action": "include" }, { "rule-type": "table-settings", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "HR", "table-name": "TEST_CLOB" }, "lob-settings": { "mode": "limited", "bulk-max-size": "16" } } ] }
即使这样Amazon DMS任务创建时使用FullLobMode : true
,每张表 LOB 设置直接Amazon DMS将此特定表中的 LOB 数据截断为 16,000。你可以查看任务日志来确认这一点。
721331968: 2018-09-11T19:48:46:979532 [SOURCE_UNLOAD] W: The value of column 'C' in table 'HR.TEST_CLOB' was truncated to length 16384
内联日志设置
在您创建Amazon DMS任务,LOB 模式决定如何处理 LOB。
在完整的 LOB 模式和有限的 LOB 模式下,每种模式都有自己的优点和缺点。内联 LOB 模式结合了完整 LOB 模式和有限 LOB 模式的优点。
如果您需要同时复制小型和大型 LOB,并且大多数 LOB 都很小,则可以使用内联 LOB 模式。选择此选项后,在满载期间Amazon DMS任务以内联方式传输小型 LOB,这样效率更高。这些区域有:Amazon DMS任务通过从源表中执行查找来传输大型 LOB。
在变更处理过程中,通过从源表中执行查找来复制小型和大型 LOB。
当您使用内联 LOB 模式时,Amazon DMS任务检查所有 LOB 大小以确定要内联传输哪些 LOB 大小。大于指定大小的 LOB 使用完整 LOB 模式复制。因此,如果您知道大多数 LOB 都大于指定设置,则最好不要使用此选项。相反,允许无限的 LOB 大小。
您可以使用任务设置中的属性配置此选项,InlineLobMaxSize
,仅在以下情况下可用FullLobMode
将设置为true
. 的默认值InlineLobMaxSize
为 0,范围为 1 —102400 千字节 (100 MB)。
例如,您可以使用以下内容Amazon DMS任务设置。在这里,设置InlineLobMaxSize
值为 5 会导致所有小于或等于 5,000 的 LOB 都以内联方式传输。
{ "TargetMetadata": { "TargetSchema": "", "SupportLobs": true, "FullLobMode": true, "LobChunkSize": 64, "LimitedSizeLobMode": false, "LobMaxSize": 32, "InlineLobMaxSize": 5, "LoadMaxFileSize": 0, "ParallelLoadThreads": 0, "ParallelLoadBufferSize":0, "BatchApplyEnabled": false, "TaskRecoveryTableEnabled": false}, . . . }
提高使用行筛选迁移大型表时的性能
要提高迁移大型表时的性能,请将迁移分为多个任务。要通过行筛选将迁移分解为多个任务,您可以使用键或分区键。例如,如果您有一个整数主键 ID,范围从 1 到 8000000,您可以使用行筛选创建 8 个任务,每个任务迁移 100 万条记录。
要在控制台中应用行筛选,请执行以下操作:
打开 Amazon Web Services Management Console。
选择任务,并创建新的任务。
选择表映射选项卡,然后展开选择规则.
选择添加新的选择规则. 现在,您可以使用小于或等于、大于或等于、等于、等于,或者在两个值之间添加范围条件的列筛选器。有关列筛选的更多信息,请参阅 从控制台指定表格选择和转换规则.
如果您有一个按日期分区的大型分区表,则可以根据日期迁移数据。例如,假设您有一个按月分区的表,并且只更新当前月份的数据。在这种情况下,您可以为每个静态月度分区创建满负荷任务,并为当前更新的分区创建满负载加 CDC 任务。
如果您的表有单列主键或唯一索引,则可以使用Amazon DMS任务分段使用范围类型的parallel 加载来parallel 加载数据。有关更多信息,请参阅 表和集合设置规则和操作。
持续复制
Amazon DMS 提供数据的持续复制,确保源数据库与目标数据库的同步。它只复制一部分数据定义语言 (DDL) 语句。Amazon DMS不传播索引、用户、权限、存储过程等项目以及与表数据不直接相关的其他数据库更改。
如果您计划使用持续复制,请将多可用区创建复制实例时的选项。通过选择多可用区,您将获得复制实例的高可用性和故障转移支持。但是,此选项可能会影响性能,并且在将更改应用于目标系统时会减慢复制速度。
在升级源数据库或目标数据库之前,我们建议您停止任何Amazon DMS在这些数据库上运行的任务。升级完成后继续执行任务。
在持续的复制过程中,确定源数据库系统和您的数据库系统之间的网络带宽至关重要Amazon DMS复制实例。确保网络在正在进行的复制过程中不会造成任何瓶颈。
确定源数据库系统上每小时的更改率和存档日志生成率也很重要。这样做可以帮助您了解正在进行的复制过程中可能获得的吞吐量。
减少源数据库上的负载
Amazon DMS 使用源数据库上的一些资源。在完整加载任务期间,Amazon DMS 对并行处理的每个表执行源表的完整表扫描。此外,您在迁移过程中创建的每项任务都会在 CDC 流程中查询变更来源。要使 Amazon DMS 对一些源(例如 Oracle)执行 CDC,您可能需要增加写入到数据库更改日志中的数据量。
如果您发现源数据库负担过重,请减少迁移中每个任务的任务或表的数量。每个任务独立获取源更改,因此整合任务可以减少更改捕获工作负载。
减少目标数据库的瓶颈
在迁移过程中,尝试移除所有争夺目标数据库写入资源的进程:
-
关闭不必要的触发器。
-
在初始加载期间关闭二级索引,稍后在正在进行的复制期间将其重新打开。
-
对于 Amazon RDS 数据库,最好在切换之前关闭备份和多可用区。
-
在迁移到非 RDS 系统时,最好在切换之前关闭目标系统上的所有日志记录。
在迁移期间使用数据验证
为确保您的数据从源准确迁移到目标,我们强烈建议您使用数据验证。如果您为任务开启数据验证,Amazon DMS对表执行满载后,立即开始比较源数据和目标数据。
数据验证使用以下数据库,而 Amazon DMS 支持它们作为源终端节点和目标终端节点:
-
Oracle
-
PostgreSQL
-
MySQL
-
MariaDB
-
Microsoft SQL Server
-
Amazon Aurora MySQL 兼容版
-
Amazon Aurora PostgreSQL-Compatible Edition
-
IBM Db2 LUW
有关更多信息,请参阅 AmazonDMS 数据验证。
监控Amazon DMS使用指标的任务
您可以使用多个选项来监控任务的指标Amazon DMS控制台:
- 主机指标
-
你可以在以下位置找到主机指标CloudWatch 指标每个特定复制实例的选项卡。在这里,您可以监控您的复制实例的大小是否合适。
- 复制任务指标
-
复制任务的指标,包括传入和已提交的更改,以及复制主机与源/目标数据库之间的延迟,可以在上找到CloudWatch 指标每个特定任务的选项卡。
- 表格指标
-
你可以在以下位置找到各个表格的指标表格统计信息每个单独任务的选项卡。这些指标包括以下数字:
-
在满载期间加载的行。
-
自任务启动以来的插入、更新和删除。
-
自任务开始以来的 DDL 操作。
-
有关指标监控的更多信息,请参阅监控Amazon DMS 任务.
事件和通知
Amazon DMS使用 Amazon SNS 在出现以下情况时提供通知Amazon DMS事件发生,例如创建或删除复制实例。您可以在 Amazon SNS 支持的任何形式下使用这些通知Amazon区域。这可能包括电子邮件、短信或对 HTTP 端点的呼叫。
有关更多信息,请参阅 在中处理Amazon SNS 事件和通知Amazon Database Migration Service。
使用任务日志以排除迁移问题
在某些情况下,Amazon DMS 会遇到一些仅在任务日志中显示警告或错误消息的问题。具体而言,数据截断问题或者外键违规造成的行拒绝仅会写入任务日志。因此,在迁移数据库时务必要查看任务日志。要查看任务日志,请配置 Amazon CloudWatch 作为任务创建的一部分。
有关更多信息,请参阅使用亚马逊监控复制任务 CloudWatch.
使用 Time Travel 排除复制任务故障
问题排查Amazon DMS迁移问题,你可以使用 Time Travel。有关 Time Travel 的更多信息,请参阅时间旅行任务设置.
使用 Time Travel 时,请注意以下注意事项:
-
为避免 DMS 复制实例的开销,请仅为需要调试的任务启用 Time Travel。
-
当您使用 Time Travel 对可能运行数天的复制任务进行故障排除时,请监控复制实例指标以了解资源开销。这种方法尤其适用于在源数据库上长时间运行高事务负载的情况。有关更多信息,请参阅 监控Amazon DMS 任务。
-
当时间旅行任务设置时
EnableRawData
将设置为true
,DMS 复制期间的任务内存使用量可能高于未启用 Time Travel 时的使用量。如果您长时间开启 “时间旅行”,请监控您的任务。 -
目前,你只能在任务级别开启 “时空旅行”。对所有表的更改都记录在时间旅行日志中。如果您要对事务量大的数据库中的特定表进行故障排除,请创建一个单独的任务。
更改 Oracle 目标的用户和架构
当你使用 Oracle 作为目标时,Amazon DMS将数据迁移到目标端点的用户拥有的架构中。
例如,假定您正在迁移名为的架构PERFDATA
到 Oracle 目标端点,并且目标端点的用户名是MASTER
.Amazon DMS以以下身份连接到 Oracle 目标MASTER
并填充MASTER
包含来自的数据库对象的架构PERFDATA
.
要覆盖此行为,请提供架构转换。例如,要迁移PERFDATA
将架构对象转换为PERFDATA
目标端点的架构,使用以下转换。
{ "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "PERFDATA" }, "rule-target": "schema", "rule-action": "rename", "value": "PERFDATA" }
有关转换的更多信息,请参阅 使用 JSON 指定表格选择和转换规则。
更改 Oracle 目标的表和索引表空间
当使用甲骨文作为目标时,Amazon DMS将所有表和索引迁移到目标中的默认表空间。例如,假设您的源是 Oracle 之外的数据库引擎。所有目标表和索引都迁移到同一个默认表空间。
要覆盖此行为,请提供相应的表空间转换。例如,假设您要将表和索引迁移到 Oracle 目标中的表和索引表空间,这些表空间以源中的架构命名。在此情况下,您可以使用与下面类似的转换。在这里,源代码中的架构名为INVENTORY
目标中相应的表和索引表空间被命名为INVENTORYTBL
和INVENTORYIDX
.
{ "rule-type": "transformation", "rule-id": "3", "rule-name": "3", "rule-action": "rename", "rule-target": "table-tablespace", "object-locator": { "schema-name": "INVENTORY", "table-name": "%", "table-tablespace-name": "%" }, "value": "INVENTORYTBL" }, { "rule-type": "transformation", "rule-id": "4 "rule-name": "4", "rule-action": "rename", "rule-target": "index-tablespace", "object-locator": { "schema-name": "INVENTORY", "table-name": "%", "index-tablespace-name": "%" }, "value": "INVENTORYIDX" }
有关转换的更多信息,请参阅 使用 JSON 指定表格选择和转换规则。
当 Oracle 既是源又是目标时,您可以通过设置 Oracle source extra 连接属性来保留现有的表或索引表空间分配enableHomogenousTablespace=true
. 有关更多信息,请参阅 使用 Oracle 作为源时的端点设置Amazon DMS。
升级复制实例版本
Amazon定期发布新版本的Amazon DMS复制引擎软件,具有新功能和性能改进。复制引擎软件的每个版本都有自己的版本号。测试你的现有版本至关重要Amazon DMS在将复制实例升级到更高版本之前,正在运行生产工作负载的复制实例。有关可用版本升级的更多信息,请参阅AmazonDB 发布说明.
了解您的迁移成本
Amazon Database Migration Service帮助您将数据库迁移到Amazon以低成本轻松安全。您只需为复制实例和任何额外的日志存储空间付费。每个数据库迁移实例都包含足以容纳交换空间、复制日志和用于大多数复制的数据缓存的存储空间,入站数据传输是免费的。
在初始加载期间或加载高峰时段,您可能需要更多资源。您可以使用 Cloud Watch 指标密切监控复制实例的资源利用率。然后,您可以根据使用情况扩大和缩小复制实例的大小。
有关估算迁移成本的更多信息,请参阅: