Source:
确认问题:
- 查看Thread Statistics中,reader threads的使用时间多去其他两个threads。
解决方法:
如果源是关系型数据库:
- 方法一:使用Filter,在SQ组件后加一个Filter并默认为FALSE(即没有任何数据会传输到下一个组件当中,即只有加载数据的过程),如果这个时候耗用时间没有大幅度下降,说明大部分时间花费在了source。
- 方法二:通过直接加载的方式,去掉所有的Transformation。如果这个时候耗用时间没有大幅度下降,说明大部分时间花费在了source。(所以,我们强调先调TARGET再调SOURCE)
- 方法三:直接将INFA生成的SQL复制出来在DB里面执行,看执行速度的差别。
其他:
优化QUERY:
- 多张表:只用HINTS ,告诉数据库优化器走怎样一个路径。
注意:在使用HINTS的时候,在PowerCenter得到第一条数据前,会有一个比较长延迟得到应该设置optimizer hint尽快返回结果,而不是等到所有结果完整再返回。
- 单张表:加入ORDER BY 或 GROUP BY 可能会有一定优化效果,比如:在加索引的时候。
- 在源数据库的源表中添加索引也有一定的帮助。
使用条件FILTER(Source Qualifier):
- 使用Source Qualifier中的SQL Override,在QUERY中添加WHERE字句过滤掉MAPPING中 不需要的字段,以减少数据通信。