zoukankan      html  css  js  c++  java
  • 优化之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 Server 动态生成分区脚本
    SQL Server数据库服务器高性能设置
    SQL Server 2005 自动化删除表分区设计方案
    SQL Server 自动化管理分区设计方案(图解)
    简单实用SQL脚本Part:sql多行转为一列的合并问题
    简单实用SQL脚本Part9:纵向回填信息
    SQL Server datetime数据类型设计、优化误区
    SQL Server 创建链接服务器
    SQL Server 数据库最小宕机迁移方案
    SQL Server 表分区注意事项
  • 原文地址:https://www.cnblogs.com/shiliye/p/10694624.html
Copyright © 2011-2022 走看看