Mapping層級的調優可能會花費時間,可是性能調優的效果確實很是顯著的
優化Target,Source以後,能夠調優Mapping
一般的方法是儘量減小組件及組件的字段間沒必要要的連線
即儘量用最少的組件和表達式作最多的工做,儘量減小組件的字段間沒必要要的連線來保證數據移動量
數據庫
優化之Source平面文件
經過如下幾種方式進行優化:
1 調整Line Sequential Buffer長度
能夠設定Integration Service讀取平面文件每行的最大字節數,默認狀況下Integration Service每行最多讀取1024字節
但若是平面文件每行的字節數少於默認的1024字節,可在session properties裏將Line Sequential Buffer調低
2 關於Delimited Flat File
Delimited Flat File是經過分隔字符給各個字段劃定邊界來分隔各字段的
同時Delimited Flat File也會使用轉義字符,當Integration Service碰見轉義字符會將分隔符做爲普通字符
減小使用轉義字符,或若是文件內部不包含冒號,均可以提升性能緩存
3 關於XML文件
因爲XML格式文件包含標籤,且所包含標籤層級或對應屬性越多,文件就越大,所以每每XML文件的大小會比普通文件大不少
此外讀取XML文件,Integration Service還要對文件內部節點結構進行解析並對其進行緩存
所以讀取所花費時間每每比普通文件多session
配置Single-Pass Reading
所謂Single-Pass Reading,就是讀取一個Source讀取數據,中間有多個邏輯處理分支,而後將數據加載到多個不一樣的Target
若是有多個session是從同一個數據源讀取數據的,能夠考慮使用Single-Pass Reading這種方式
能夠將多個mapping中的邏輯合併到一個mapping中,這樣source就可只讀取一次,並將數據發送到多個不一樣的管道
一個特定的行能夠被全部的管道、任意的管道組合或沒不被管道使用app
建立Pass-Through Mapping
將Source Qualifier組件和Target對應字段直接相連函數
關於Filter
可以使用以下兩個組件過濾數據
Source Qualifier: 該組件只能從數據源是關係型數據庫的過濾數據
Filter: 該組件能夠從任何數據源過濾數據
經過過濾數據,能夠減小下游數據處理所花費時間
同時也要避免在filter中使用複雜的表達式,應只使用簡單的integer或true/false
若是不須要保留reject數據,也可以使用filter或router組件從Update Strategy組件中去掉reject數據性能
關於數據類型轉換
可經過減小沒必要要的數據類型轉換來提高性能
好比,若是mapping將數據從integer類型轉換爲decimal類型後,又再次轉換爲integer類型,這些沒必要要的類型轉換會影響性能
使用以下方式進行數據類型轉換
1) 使用lookup和filter組件進行比較時,使用integer類型代替其餘數據類型
2) 經過端口到端口的轉換,將Source的日期類型轉換爲String類型
即直接將source的日期類型字段鏈接到Target的String類型字段,或者將Target的對應字段從String類型改成日期類型優化
關於表達式code
建立可複用邏輯
若是在mapping中多處使用相同的處理,並將處理結果發送到不一樣Target
則可先將該處理作成common的,即在上游處理一次,而後再將結果輸送到下游
儘可能減小聚合函數的使用
每次使用聚合函數,Integration Service都會對數據進行檢索並分組
好比,SUM(COLUMN_A) + SUM(COLUMN_B),使用了兩次聚合運算,但實際上計算一次就能夠了,改爲SUM(COLUMN_A + COLUMN_B)
用本地變量替換共通表達式
若是一個組件中屢次使用了表達式,能夠將該表達式設置成變量
可僅在組件內部使用本地變量,但因爲變量值只經過一次計算而得到,所以節省了屢次計算的時間
選擇數值與字符串操做
Integration Service處理數字要比字符串快
好比,若是須要從一個表查找兩個字段,一個ID,另一個是NAME,則匹配ID的速度要高於匹配name的速度
關於字符比對
當Integration Service在Char和Varchar列之間執行比較時,每次在行中發現尾隨空格時,它都會減慢速度
當在Informatica管理員中配置Integration Service時,可以使用TreatCharasCharonRead選項
這樣Integration Service就不會從Char源字段的末尾刪除尾隨空格
選擇decode替代lookup
當使用lookup函數時,Integration Service須要在一個數據庫裏查詢某個表
當使用decode函數時,Integration Service會將查找值併入表達式而不是查找一個單獨的表
所以,當查出少許的不變的數據時,使用decode而不是lookup
使用操做符而不是函數
Integration Service處理操做符的速度高於函數,
以下例:
CONCAT( CONCAT( CUSTOMERS.FIRST_NAME, ' ') CUSTOMERS.LAST_NAME)
可替換爲:
CUSTOMERS.FIRST_NAME || ' ' || CUSTOMERS.LAST_NAME
優化IIF函數
若是表達式中使用了太多的IIF以及and,or,=這樣運算符號,會影響到性能
IIF( FLG_A = 'Y' and FLG_B = 'Y' AND FLG_C = 'Y', VAL_A + VAL_B + VAL_C,
IIF( FLG_A = 'Y' and FLG_B = 'Y' AND FLG_C = 'N', VAL_A + VAL_B ,
IIF( FLG_A = 'Y' and FLG_B = 'N' AND FLG_C = 'Y', VAL_A + VAL_C,
IIF( FLG_A = 'Y' and FLG_B = 'N' AND FLG_C = 'N', VAL_A ,
IIF( FLG_A = 'N' and FLG_B = 'Y' AND FLG_C = 'Y', VAL_B + VAL_C,
IIF( FLG_A = 'N' and FLG_B = 'Y' AND FLG_C = 'N', VAL_B ,
IIF( FLG_A = 'N' and FLG_B = 'N' AND FLG_C = 'Y', VAL_C,
IIF( FLG_A = 'N' and FLG_B = 'N' AND FLG_C = 'N', 0.0,))))))))
可經過以下方式將IIF以及and,or,=減小到最低
IIF(FLG_A='Y', VAL_A, 0.0)+ IIF(FLG_B='Y', VAL_B, 0.0)+ IIF(FLG_C='Y', VAL_C, 0.0) orm
評估表達式
若是沒法肯定哪一個表達式影響了性能,能夠將一部分表達式用固定值代替,而後比對修改先後的時間
若是時間差較大,則說明影響性能的表達式就在被固定值替代的這一部分範圍內
而後採用相同方式,逐漸縮小範圍,最終肯定到真正影響性能的表達式router
優化外部過程 若是外部過程須要交替讀取input數據時,能夠將input數據阻斷 若是沒有阻斷功能,在編寫外部過程時需將input數據緩存,而拷貝數據到緩存是會下降性能的 好比,有兩組input數據,當讀取一組數據時,能夠將另一組數據阻斷 不然就只能在讀取一組數據的同時,將另一組數據緩存,而這會下降性能