數據源的瓶頸一般發生從數據庫讀取數據的時候,緣由一般以下:
1) 腳本的查詢效率低下
2) 數據庫網絡包過小
如何斷定源瓶頸
經過在session log中讀取thread statistics斷定源的瓶頸
若是read thread花費的時間大大多於write thread和transformation thread,則可說明性能瓶頸在於目標數據庫
若是session是從源文件讀取數據,則性能瓶頸可能不在源數據庫
若是session是從關係型數據庫讀取數據的,可經過以下方法判斷源的瓶頸網絡
使用filter組件
在每個source qualifier組件後追加一個filter組件,將條件設爲false(如1=2)確保沒有數據經過
若是session運行的時間仍是沒有變化,則可斷定瓶頸在源
建立測試用的read mapping
建立測試用的read mapping,並將查詢與其餘組件隔離,建立步驟以下:
1) 將原來mapping複製
2) 在複製的mapping裏,只保留sources, source qualifiers和任何其餘custom joins或queries組件
3) 移除全部中間數據轉換處理的組件
4) 將source qualifiers組件鏈接至目標文件
若是session運行的時間仍是沒有變化,則可斷定瓶頸在源
使用數據庫查詢
直接在數據庫端運行查詢腳本
若是腳本運行的時間很長,則可斷定瓶頸在於源的查詢腳本
如何解決源的性能
1) 當Integration Service從文件讀取數據,可設定讀取每行數據時的最大字節數
2) 讓DBA優化查詢腳本
3) 增長數據庫網絡包大小
4) 追加索引和約束
5) 若是一個數據庫查詢在兩個時間測量之間有很長的延遲,能夠考慮使用優化器(optimizer hint)session