基於kettle工具提高表輸出寫入速度(每秒萬條記錄)

2019-10-30     波波說運維

概述

最近用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方面的內容,感興趣的朋友可以關注下~

文章來源: https://twgreatdaily.com/zh-cn/SSF3G24BMH2_cNUgpjYq.html