優化之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

相關文章
相關標籤/搜索