Informatica CDC 映射:组源正在缓慢获取记录
Informatica CDC Mapping: Group Source is fetching records Slowly
我们有 37 个 Informatica 会话,其中大多数会话的平均时长约为 25 table。很少有会话将 1 table 作为源和目标。我们的源是 Oracle,目标是 Greenplum 数据库。我们正在使用安装在 Oracle 上的 Powerexchange 10.1 来获取我们的更改记录。
我们注意到,对于具有更多 table 的会话,需要更多时间来获取数据并更新目标。添加更多 table 是否会延迟处理?在那种情况下如何调整以尽快获取记录?
我们 运行 19 个 CDC 映射,每个映射在 17 到 90 table 之间,并且最近在性能上取得了突破。 tables 的数量对我们来说不是最重要的限制因素,电源中心和电源交换才是。我们的来源是 z/OS 上的 DB2,但这可能并不重要......
这就是我们所做的:
1) 我们将 DTM 缓冲区块大小增加到 256KB,并将 DTM 缓冲区大小增加到 1GB 或更多,'complex' 映射需要很多缓冲区块。
2) 我们将连接属性更改为:
- 实时刷新延迟=86000(最大设置)
- 会话中的提交大小设置得非常高(以允许上述设置成为决定因素)
- OUW count=-1(同上原因)
- 每次提交的最大行数=0
- 每次提交的最小行数=0
3) 我们将会话 属性 'recovery strategy' 设置为 'fail task and continue workflow' 并实施我们自己的解决方案以在每次工作流启动时从头开始创建 'restart token file'。
只是稍微偏离主题:我们实现它的方式是使用仅包含一行的额外 table(我们称之为 SYNC table)。该行每 10 分钟通过一个非常可靠的计划进程(一个小型 CICS 程序)在源上更新一次。此 table 的内容在每个工作流中写入一次目标数据库,并且在映射中添加了一个额外的列,其中包含 $$PMWorkflowName 的内容。除了 workflowname 列之外,DTL__Restart1 和 *2 两列也会写入目标。
在工作流启动期间,我们 运行 在实际 CDC 会话之前有一个小型可重用会话,它从目标端的 SYNC table 读取当前工作流的记录,并从头开始创建 RESTART 文件。
[请注意,您最终会在目标中复制最多 10 分钟(从工作流开始时间算起)。我们接受这一点,并将其汇总到从这些读取的所有映射中]
尝试修改这些的组合并讲述您的体验。我们现在在 10 分钟间隔内每个映射有 10-1 亿行的最大吞吐量。我们的目标是 Netezza(又名 IBM 的 PDA)
还有一件事我可以告诉你:
每次触发提交时(使用上述设置每 86 秒一次),Power Center 将针对一个大提交范围内的所有 table 清空其所有写入缓冲区。如果其中任何一个被另一个进程锁定,您可能最终会在编写器端进行大量级联锁定,这会使 CDC 看起来很慢。
我们有 37 个 Informatica 会话,其中大多数会话的平均时长约为 25 table。很少有会话将 1 table 作为源和目标。我们的源是 Oracle,目标是 Greenplum 数据库。我们正在使用安装在 Oracle 上的 Powerexchange 10.1 来获取我们的更改记录。
我们注意到,对于具有更多 table 的会话,需要更多时间来获取数据并更新目标。添加更多 table 是否会延迟处理?在那种情况下如何调整以尽快获取记录?
我们 运行 19 个 CDC 映射,每个映射在 17 到 90 table 之间,并且最近在性能上取得了突破。 tables 的数量对我们来说不是最重要的限制因素,电源中心和电源交换才是。我们的来源是 z/OS 上的 DB2,但这可能并不重要...... 这就是我们所做的:
1) 我们将 DTM 缓冲区块大小增加到 256KB,并将 DTM 缓冲区大小增加到 1GB 或更多,'complex' 映射需要很多缓冲区块。
2) 我们将连接属性更改为: - 实时刷新延迟=86000(最大设置) - 会话中的提交大小设置得非常高(以允许上述设置成为决定因素) - OUW count=-1(同上原因) - 每次提交的最大行数=0 - 每次提交的最小行数=0
3) 我们将会话 属性 'recovery strategy' 设置为 'fail task and continue workflow' 并实施我们自己的解决方案以在每次工作流启动时从头开始创建 'restart token file'。 只是稍微偏离主题:我们实现它的方式是使用仅包含一行的额外 table(我们称之为 SYNC table)。该行每 10 分钟通过一个非常可靠的计划进程(一个小型 CICS 程序)在源上更新一次。此 table 的内容在每个工作流中写入一次目标数据库,并且在映射中添加了一个额外的列,其中包含 $$PMWorkflowName 的内容。除了 workflowname 列之外,DTL__Restart1 和 *2 两列也会写入目标。 在工作流启动期间,我们 运行 在实际 CDC 会话之前有一个小型可重用会话,它从目标端的 SYNC table 读取当前工作流的记录,并从头开始创建 RESTART 文件。 [请注意,您最终会在目标中复制最多 10 分钟(从工作流开始时间算起)。我们接受这一点,并将其汇总到从这些读取的所有映射中]
尝试修改这些的组合并讲述您的体验。我们现在在 10 分钟间隔内每个映射有 10-1 亿行的最大吞吐量。我们的目标是 Netezza(又名 IBM 的 PDA)
还有一件事我可以告诉你: 每次触发提交时(使用上述设置每 86 秒一次),Power Center 将针对一个大提交范围内的所有 table 清空其所有写入缓冲区。如果其中任何一个被另一个进程锁定,您可能最终会在编写器端进行大量级联锁定,这会使 CDC 看起来很慢。