概述
最近用kettle時發現輸出到數據表太久,1小時才寫了3萬條數據,平均每秒速度為8條,基於此,做一下改進。
優化1:優化網絡連接屬性
mysql表輸出的時候出現減速的原因可能是因為網絡連結的屬性設置
在此處添加參數:
useServerPrepStmts=false
rewriteBatchedStatements=true
useCompression=true
characterEncoding=utf8
優化2:開啟多線程
kettle轉換在運行時,每個步驟可被看成一個帶著輸入、輸出行隊列的工作線程,每個線程是並行運行的,當數據化是有效時即處理。kettle允許針對每個獨立步驟手工定義其線程數。如果轉換有一個瓶頸步驟,該步驟有多個實例同時運行可以加快處理速度。可以通過檢查每個步驟的輸入、輸出隊列及行/秒的處理性能找到候選的瓶頸步驟。如果某步驟有滿輸入隊列,空輸出隊列,並每秒處理行數低,這些因素往往決定了整個轉換的性能,從而找到瓶頸步驟。這些因素的數據在kettle執行「Step Metrics」視圖中可以看到。
右擊問題步驟,選擇「change number of copies to start..」並輸入合適的線程數,這時當你運行轉換時,你將注意到多個運行的實例,每個實例在視圖中有自己的輸入、輸出隊列。
優化3:調整隊列大小
KTR是一個流式的處理過程,步驟與步驟之間的數據傳遞是通過緩存來完成的,調整緩存的大小可以對KTR的運行產生明顯的影響。
Edit —> Settings —> Miscellaneous —> Nr of rows in rowset (緩存的記錄行數)
這個值的大小需要根據機器的配置來選擇,如果可用內存足夠,一般的設置是10000,也就是緩存10000行數據,如果內存比較緊張,可以將該值調小一些,保證不會占用過量內存。
優化4:提高每次表輸出的提交量
適當加大每次commit的數量。
最後還可以用kettle並發處理job,因為滿足需求了,所以就不繼續了。
覺得有用的朋友多幫忙轉發哦!後面會分享更多devops和DBA方面的內容,感興趣的朋友可以關注下~