使用多个处理组
通常,仅需要一个提取组才能从数据库中高效捕获。但是,根据重做(事务处理)值或数据和操作类型,您可能会发现需要将一个或多个提取组添加到配置中。
同样,如果在协调模式下使用 Replicat,则通常仅需要一个 Replicat 组将数据应用于目标数据库。但是,即使在某些情况下,在协调模式下使用 Replicat 时,您也可能需要使用多个 Replicat 组。如果在经典模式下使用复制,并且应用程序生成高事务处理量,则可能需要使用并行复制组。
每个 Oracle GoldenGate 组件(Extract、trail、DISTPATH 和 Replicat)都是一个独立的模块,因此您可以根据自己的需要将它们组合在一起。您可以使用多个线索以及并行提取和复制流程来处理大量事务处理、提高性能、消除瓶颈、减少延迟或隔离特定数据的处理。
下图显示了配置 Oracle GoldenGate 以提高吞吐量速度并解决网络带宽问题的一些方法。

图像标签表示以下内容:
-
A :并行提取划分负载。例如,按方案或隔离生成提取的表。
-
B :具有本地线索的提取可用于过滤、转换和网络误差。
-
C :多个 DISTPATHS 围绕网络每进程带宽限制进行工作,以启用 TCP/IP 吞吐量。将
TABLE参数语句除以它们。 -
D :并行复制可提高数据库的吞吐量。任何线索都可以由一个或多个副本读取。将
MAP语句分为两部分。
使用多个进程组的准则
在配置多个处理组之前,请查看以下准则以确保您的配置生成预期结果并维护数据完整性。
维护数据完整性
并非所有工作负载都可以跨多个组进行分区,并且仍保留原始事务原子性。您必须确定一个组中的对象是否具有依赖于任何其他组中的对象的依赖性(事务性或其他)。例如,无法以这种方式对工作量例行更新主键的表进行分区。DDL 复制(如果数据库支持)在此模式下不可行,也无法使用某些基于特定记录的 SQLEXEC 或 EVENTACTIONS 功能。
如果您的表没有任何外键相关性或对主键的更新,则可以使用多个进程。将相关 DML 保持在同一流程流中,以确保数据完整性。
组数
可在系统上运行的并发提取和复制处理组的数量取决于可用的系统内存量。每个提取和经典复制进程需要大约 25-55 MB 或更多内存,具体取决于事务的大小和并发事务数。在 Oracle GoldenGate 中,Oracle GoldenGate 命令界面的每个实例最多支持 5,000 个并发提取组和复制组(组合)。在支持的级别上,可以使用命令(例如 INFO 和 STATUS 命令)完全控制和查看所有组。
在支持的级别之外,不会显示组信息,并且可能会出现错误。Oracle GoldenGate 建议将提取和复制组的数量(组合)保持在可管理的级别(例如 100 或以下级别)以内,以便有效地管理环境。最大组数由 MAXGROUPS 参数控制,该参数的默认值为 1000。
对于 Windows Server 环境,可以运行的进程组数与“非交互式”Windows 桌面堆内存设置紧密耦合。Windows 桌面堆的默认设置可能足以运行非常少的进程组,但当您接近更大的进程组(超过 60 个左右)时,您需要调整“注册表中 SharedSection 字段的非交互式值,基于来自 Microsoft 的此信息(Windows 桌面堆内存),或者增加 Oracle GoldenGate 主目录的数量,并在这些主目录中分布所需的进程组总数。注:有关修改 Windows 桌面堆内存的更多信息,请查看以下 Oracle 知识库文档(文档 ID 2056225.1)。
内存
对于将要运行的每个 Oracle GoldenGate 提取和复制进程,系统必须有足够的交换空间。要确定所需的交换空间,请执行以下操作:
-
启动一个提取或复制。
-
运行管理客户端。
-
查看报告文件并查找行
PROCESS VM AVAIL FROM OS (min)。 -
如果需要,将值向上舍入到下一个完整千兆字节。例如,向上舍入 1.76GB 到 2 GB。
-
将该值乘以将要运行的提取和复制进程数。结果是可能需要的最大交换空间量
有关如何管理内存的更多信息,请参见《 Parameters and Functions Reference for Oracle GoldenGate 》中的 CACHEMGR 参数。
隔离处理密集型表
可以使用多个处理组来支持某些类型的表,这些表通常会干扰正常处理并导致在目标上构建延迟。例如:
-
由于列的数据类型、参数规范或执行 SQL 过程,提取可能需要从数据库执行提取。当必须从数据库中提取数据时,它会影响提取的性能。如果将
STATOPTIONS REPORTFETCH参数包含在提取参数文件中,则可以从STATS EXTRACT命令获取提取统计信息。然后,假设可以维护事务完整性,可以将这些表隔离到自己的提取组中。 -
在经典模式下,复制进程可以成为性能瓶颈的来源,因为它是一个单线程进程,通过使用常规 SQL 一次应用一个操作。即使启用了
BATCHSQL(请参见 Parameters and Functions Reference for Oracle GoldenGate),复制处理具有大型或长时间运行的事务处理、大量、大量更改的列和 LOB 数据的表也可能需要更长时间。然后,假设可以维护事务完整性,可以将这些表隔离到自己的复制组中。