优化复制事务处理
Replicat 使用常规 SQL,因此其性能取决于目标数据库的性能和正在应用的 SQL 类型(插入、更新或删除)。但是,您可以采取某些步骤来最大限度地提高复制效率。
针对屏障事务处理优化协调性能
在协调复制配置中,屏障事务(例如主键的更新)导致对数据库的提交次数增加,并且会中断 Replicat 的 GROUPTRANSOPS 功能的优势。当协调复制的整体工作量中存在大量屏障事务时,使用大量线程实际上会降低复制性能。
要在需要大量屏障事务处理时保持高性能,可以执行以下操作:
-
减少组中的活动线程数。这将减少 Replicat 执行的总提交数。
-
将占大多数屏障事务的表及其具有相关性的任何表移动到具有少量线程的单独协调复制组。使原始复制组中具有最小阻隔事务处理的表具有更高的线程数,从而保持并行性能而不受阻隔事务处理的中断。
-
(Oracle RAC) 在新的 Replicat 配置中,可以增大 Replicat 检查点表的
PCTFREE属性。但是,必须在首次启动复制之前执行此操作。建议的PCTFREE值为 90。
防止在缺少关键字时进行全表扫描
如果目标表没有主键、唯一键或唯一索引,Replicat 将使用所有列来构建其 WHERE 子句。这实际上是全表扫描。
要提高行选择的效率,请在 TABLE 和 MAP 语句中使用 KEYCOLS 子句将一个或多个列标识为唯一列。复制将使用指定的列作为键。以下示例显示了 TABLE 语句中的 KEYCOLS 子句:
TABLE hr.emp, KEYCOLS (FIRST_NAME, LAST_NAME, DOB, ID_NO);
有关使用准则和语法,请参见《 Parameters and Functions Reference for Oracle GoldenGate 》中的 TABLE 和 MAP 参数。
拆分大型事务处理
如果目标数据库无法处理源数据库中的大型事务,则可以使用 Replicat 参数 MAXTRANSOPS 将它们拆分为一系列较小的事务。有关详细信息,请参阅 Parameters and Functions Reference for Oracle GoldenGate 。
注:MAXTRANSOPS 对于 Oracle AI Database 系统上的集成复制无效。
调整打开的游标
Replicat 进程为缓存的 SQL 语句和 SQLEXEC 操作维护游标。如果没有足够的游标,Replicat 必须使语句过期。缺省情况下,Replicat 维护的游标数与 MAXSQLSTATEMENTS 参数允许的游标数相同。您可能会发现需要增加此参数的值。如果是,您可能还需要调整数据库允许的最大打开游标数。有关详细信息,请参阅《 Parameters and Functions Reference for Oracle GoldenGate 》。
提高更新速度
过多的块分段会导致复制以比正常速度慢的速度应用 SQL 语句。重新组织严重碎片化的表,然后停止并启动复制以注册新对象 ID。
设置复制事务处理超时
使用 TRANSACTIONTIMEOUT 参数可防止未提交的复制目标事务处理在目标数据库上存放锁,并且不必要地占用其资源。您可以更改此参数的值,以便 Replicat 可以在目标上的现有应用程序超时和其他数据库要求内工作。
如果目标事务处理尚未收到该事务处理中最后一个源事务处理的事务处理结束记录,则 TRANSACTIONTIMEOUT 会限制 Replicat 将其保持打开状态的时间量。默认情况下,复制会将多个源事务处理分组到一个目标事务处理中以提高性能,但它不会提交部分源事务处理,并且将无限期地等待该最后一条记录。Replicat 参数 GROUPTRANSOPS 控制分组目标事务处理的最小大小。
以下事件可能持续足够长的时间来触发 TRANSACTIONTIMEOUT:
-
网络问题阻止线索数据传送到目标系统。
-
在任何系统上运行的磁盘空间不足,无法写入线索数据。
-
提取将异常终止,或者在为事务处理写入记录时终止。
-
源系统发生故障,例如停电或系统崩溃。
有关更多信息,请参见《 Parameters and Functions Reference for Oracle GoldenGate 》中的 TRANSACTIONTIMEOUT 。