优化之Joiner组件

 

Joiner组件在运行时须要额外的内存空间处理中间结果,所以会影响性能
可经过查看Joiner performance计数器来决定Joiner组件是否须要优化

经过以下方式优化Joiner组件
  将Master Source指定为具备较少重复键值的Source
    以Joiner组件的join条件做为group key对数据进行分组,去重后的数据能够做为惟一键值
    当Integration Service处理排序后的joiner转换时,它会每次缓存符合100个键的行
    若是Master Source包含多个具备相同键值的行,Integration Service必须缓存更多的行,而且性能可能会下降

    好比,join条件是Master.id=Detail.id and Master.name=Detail.name, 则链接条件是id,name
    而后Integration Service会执行select id,name from Master group by id, name,其结果集就是惟一键值对的结果集
    Integration Service每次会从上述结果集中选出100个(id,name)对,并将符合该100个(id,name)对的记录写入缓存
    若是Master中符合这100个(id,name)对的记录有越多,则写入缓存的数据量就越大,则性能就会越慢

  将Master Source指定为行数较少的源
    在session运行时,Joiner组件将Detail Source的每一行与Master Source进行比较
    Master Source的行数越少,链接比较的迭代次数就越少,性能就越好
    同理,Detail Source的行数越少,每次迭代时遍历的次数也越少

  尽量在数据库端进行join操做
    将join操做放在数据库端而不是在session里会提升性能
    但有时须要join不一样数据源,如平面文件,不一样类型数据库,此时须要在session里进行join操做
    join的类型一样也会对性能有影响,normal join的性能优于outer join而且返回相对较少的记录数

    可经过以下方式在数据库端进行join:
      配置pre-session store procedure,在存储过程里进行数据库表的join操做
      Source Qualifier的sqlquery里写脚本进行数据库表的join操做

  join以前尽量对input数据排序
    若是input数据排过序,则将磁盘读写最小化,于是提升了性能
    若是input数据没有排过序,则可将Master Source的记录数尽可能减小sql

相关文章
相关标签/搜索