SESSION用bulk方式有讲究
2017-03-11
Informatica PowerCenter是数据中心ETL设计开发主要的工具,能够方便地从异构的已有系统和数据源中抽取数据,用来建立、部署、管理企业的数据仓库,从而帮助企业做出快速、正确的决策。
Informatica对目标表的加载方式有normal和bulk两种加载方式(一般情况下采用normal加载方式即可)。bulk方式是Informatica提供的一种高性能的load数据方式,它利用数据库底层机制,依靠调用数据库本身提供的Utility来进行数据的加载。但是在有些情况下不能采用bulk方式加载,下面介绍笔者在开发工作中采用bulk方式出现的问题。
故障现象
抽取的字段有大字段数据类型,比如CLOB,如果不是最后一列,采用bulk加载方式导致抽取失败。例如:执行物资主题S_M_DW_MT_DW_MT_DISCUSSIONS_THREAD任务,运行后发生错误,查看SESSION日 志,Database errors occurred:ORA-39778:the parallel load option is not allowed when loading lob columns。
有主键、索引、大数据量情况下采用bulk加载方式,抽取效率会很低。例如:执行设备主题S_M_DW_EQP_DW_EQP_ASSET_ACTIVITY_INIT任务,设置加载方式为bulk,运行后查看SESSION日志,耗时较大。
处理过程
根据SESSION日志提示可知,此加载方式不允许加载lob列,故将SESSION目标表的加载方式更改为normal,重 新 执行任务,查看SESSION日志,任务执行成功,数据正常。
将加载方式更改为normal重新运行任务,查看SESSION日志,性能得到很大提高。
原因分析
bulk方式加载时,Informatica调用Utility进行加载,此方式将绕过数据库的 log记录,以此来提高数据库加载性能。bulk方式主要是进行大数据量Insert的操作时选用,换句话说就是不做Update。当设置了这个选项后,Informatica Sever实际是调用了数据库的bulk Utility并忽略log进行加载的。所以在这儿对bulk方式也可进行调优设置,这就是需要调整的“事务提交数” 了。Commit Interval的默认值是10000。所以,可以调大这个 值,以减少事务数(Bulk Load Transaction),提升性能。因为bulk方式只能用来做Insert操作。如果需要Update操作,在Session的Treat source rows as的设置上需要设置成Data Driven,当同时选择了两种设置,会有什么结果呢?如果同时设置了Data Driven和bulk模式, PowerCenter Sever将自动切换采用normal方式进行加载。
经验总结
在日常的开发中,bulk只在某些情况下可达到调优的效果,如果使用不当,会造成不必要的麻烦。因此,如果没有特定的需要Informatica性能调优情况下,可将目标表加载方式默认设置为normal。 在Informatica PowerCenter Workflow Manger点击Tools→Option→切换到 Miscellaneous,将 Target Load Type设置为normal即可。
在以下情况是不可使用bulk加载方式:
如果有大字段,像CLOB、BLOB类型,必须是数据表中最后一列,才可使用bulk加载方式,否则不能使用。
定义主键、外键、索引的情况下,bulk加载方式对于大数据量情况下抽取的效率反而会降低,而且只能做insert操作。