Kettle優化就這麼多

CalmReason發表於2015-11-19

Kettle正常轉換速度

場景

正常

不正常

資料庫操作

3k-2w/

2000/秒以下

檔案操作

2w/秒以上

1w條以下

httpgetset

比資料庫慢

 

 

容易產生效能問題的場景

 

查詢類:

資料庫查詢:資料庫查詢、資料庫連線、插入更新

Web查詢 :http/get/set webservice

 

計算類

格式轉換(位元組與字元互相轉換,日期)、

轉換一般用計算器和JavaScript方法。

 

排序類

排序、合併連線(依賴於排序)、分組(依賴於排序)

 

調優的關鍵:Rowset

Rowset是兩個步驟之間的快取(大小可以自己設定)

如何找到效能瓶頸:觀察Rowset,執行ktr檔案時觀察下面的視窗值(100/0表示輸入100條記錄,輸出0條記錄。如果輸入遠大於輸出,就說明這個步驟來不及處理,就是瓶頸。)

 

Rowset值的設定:編輯》設定》雜項》記錄集合裡的記錄數》10000,表示快取裡的最大記錄數就是10000

其他觀察方法:效能圖,和步驟度量效果一樣。

 

如何提高效能

合理增加索引

資料庫查詢:儘可能多的使用相等=判斷來篩選資料;如果是等值查詢,表就建hash索引;如果是比較查詢,就建B樹索引

增加複製數:查詢類。多執行緒,2-8個執行緒一個步驟。具體自己調整。

加大快取:排序類,查詢類。

叢集:查詢類、運算類、排序

更換其他的實現方式:JavaScriptJava

注意日誌級別:Rowlevel的效能是Basic級別的1/10

 

.spoonrc.kettle目錄下

 

注意死鎖問題

資料庫表死鎖:讀寫同一個表(表現是ktrrunning,卡在那不動)

轉換本身死鎖:

 

這裡死鎖的原因:排序記錄要求將所有的記錄都讀取到之後再排序,快取設定10000,發完要下游處理完才能再次傳送。這樣以來排序需要更多資料,而表輸入是複製記錄到兩個下游,一個要更多的資料,一個不要更多的資料。所以,死鎖。

解決辦法:

 

 

相關文章