信息映射中目标的性能瓶颈

时间:2017-11-08 15:18:51

标签: sql oracle informatica-powercenter

我有一个信息映射,其中软删除条件如下:

Pk_Src is null and Pk_Tgt is not null then set the active_flag to N.

现在根据这个条件,映射评估了有400k记录需要更新。它是一个简单的更新,但使用更新策略需要3个多小时

感谢您的宝贵意见。

地塞米松。

2 个答案:

答案 0 :(得分:0)

表上有多少条记录,active_flag出现了多少索引?如果active_flag在许多索引中,那么您应该考虑在会话开始之前删除这些索引,并在会话结束后重新定义它们。您是否查看了会话日志以查看哪些步骤需要时间?更新查询旁边可能还有更多内容。另一种尝试的策略是将提交间隔增加到500000(只要您的数据库撤消可以承受这一点)

答案 1 :(得分:0)

一般来说,在从infa映射进行更新/删除时,您应该会遇到非常慢的性能。比插入物慢10-100倍。这是因为没有基于“阵列”的更新/删除,因此每个更新都需要单独和顺序处理,如果时间花费90%来回发送握手,最终会出现90%的情况。对于插入,仅针对每个“数组大小”记录(例如10000)进行握手,因此开销可以忽略不计。

到目前为止,我找到的最佳解决方案是:

  1. 使用下推优化(缺点是映射需要100%可推送,这意味着:没有可变端口,并且源和目标都在同一连接后面而且更多)
  2. 使用阶段/申请方法: 在会话的pre-sql中,删除并创建一个包含您要删除的所有键的STAGE表 覆盖目标的表名以指向此STAGE表 让映射插入到STAGE表中 在post-sql中做一个 Delete from TABLE where Exists (select * from STAGE where TABLE.ID=STAGE.ID)
  3. 我希望你能跟着我