kettle的正常轉(zhuǎn)換速度
場(chǎng)景 | 正常 | 不正常 |
---|---|---|
數(shù)據(jù)庫操作 | 3k-2w條/秒 | 3k以下 |
文件操作 | 2w條以上 | 1w條以下乳讥、 |
網(wǎng)絡(luò)操作 | 比數(shù)據(jù)庫慢 |
容易產(chǎn)生性能問題的場(chǎng)景
1. 查詢類:
數(shù)據(jù)庫查詢:數(shù)據(jù)庫查詢题篷、數(shù)據(jù)庫連接、插入更新
Web查詢 :http/get/set webservice
2.計(jì)算類
格式轉(zhuǎn)換(字節(jié)與字符互相轉(zhuǎn)換撒蟀,日期)椰弊、
轉(zhuǎn)換一般用計(jì)算器和JavaScript方法许溅。
3.排序類
排序、合并連接(依賴于排序)秉版、分組(依賴于排序)
kettle調(diào)優(yōu)
1. 設(shè)置Rowset
Rowset是兩個(gè)步驟之間的緩存(大小可以自己設(shè)置)
如何找到性能瓶頸:觀察Rowset贤重,運(yùn)行ktr文件時(shí)觀察下面的窗口值(100/0表示輸入100條記錄,輸出0條記錄清焕。如果輸入遠(yuǎn)大于輸出并蝗,就說明這個(gè)步驟來不及處理祭犯,就是瓶頸。)
Rowset值的設(shè)置: 編輯》設(shè)置》雜項(xiàng)》記錄集合里的記錄數(shù)》10000滚停,表示緩存里的最大記錄數(shù)就是10000
2. 合理增加索引
數(shù)據(jù)庫查詢:盡可能多的使用相等=判斷來篩選數(shù)據(jù)沃粗;如果是等值查詢,表就建hash索引键畴;如果是比較查詢最盅,就建B樹索引
增加復(fù)制數(shù):查詢類。多線程起惕,2-8個(gè)線程一個(gè)步驟涡贱。具體自己調(diào)整。
3. 提高Kettle的寫入速度
配置數(shù)據(jù)庫連接:
useServerPrepStmts = false
rewriteBatchedStatements = true
useCompression=true
defaultFetchSize=10000 ##默認(rèn)1w
4. 提高kettle的讀取速度
useServerPrepStmts=true
cachePrepStmts=true
5. 設(shè)置步驟運(yùn)行拷貝數(shù)
kettle轉(zhuǎn)換在執(zhí)行時(shí)惹想,每一個(gè)步驟可被看成一個(gè)帶著輸入问词、輸出行隊(duì)列的工作線程,每一個(gè)線程是并行執(zhí)行的勺馆。kettles可以同時(shí)針對(duì)每一個(gè)獨(dú)立步驟手工定義其線程數(shù)戏售。右鍵設(shè)置拷貝數(shù)。
6. 設(shè)置SPOON 啟動(dòng)內(nèi)存大小
在spoon.bat這個(gè)啟動(dòng)文件中草穆,配置的有JVM的內(nèi)存XMX,("%PENTAHO_DI_JAVA_OPTIONS%"=="" set PENTAHO_DI_JAVA_OPTIONS="- Xms8192m" "-Xmx8192m" "-XX:MaxPermSize=4096m")
,默認(rèn)這個(gè)是256M灌灾,512M 256M, 其中Xms是指JVM初始分配的堆棧的內(nèi)存悲柱,Xmx是指JVM分配的堆棧的內(nèi)存 (JAVA代碼能涉及到的存儲(chǔ)數(shù)據(jù)變量的內(nèi)存)最大是多少锋喜,所以XMS必須要<= XMX,XX:MaxPermSize,是指JVM給自己分配的非堆棧內(nèi)存(供虛擬機(jī)程序自己開銷),一般來說網(wǎng)上參考是最大堆棧內(nèi)存不超過總內(nèi)存的3/8有的也說是一半,可以根據(jù)需要設(shè)置。
7. 避免抽數(shù)的源數(shù)據(jù)庫關(guān)鍵字段索引在SPOON里面失效
網(wǎng)上搜索了這種明明應(yīng)該走 但是并沒有走索引的情況:
1. 使用<> (有的時(shí)候單獨(dú)的使用< 或者>的時(shí)候也有可能)
2. like的時(shí)候不能確定最前面的字符也就是把’%_’的時(shí)候
3. 單獨(dú)使用復(fù)合索引的非前導(dǎo)列
4. 表沒有分析,字符類型不匹配 發(fā)生了顯式的或者隱式的轉(zhuǎn)換或者對(duì)索引列進(jìn)行了運(yùn)算
5. 使用了 not in 或者 not exist
8. 減少目的索引
目的地?cái)?shù)據(jù)庫表的索引太多豌鸡,這個(gè)原因顯而易見嘿般,因?yàn)椴迦霐?shù)據(jù)的時(shí)候會(huì)重新更新索引表,索引太多涯冠,插入時(shí)候會(huì)變慢炉奴。
9. 增大commit數(shù)量
插入流程中數(shù)據(jù)COMMIT過程太頻繁,數(shù)據(jù)插入的COMMIT太頻繁也是很影響效率的蛇更,20W的數(shù)據(jù)提交200次和提交20次速度顯然是不一樣瞻赶,只要你的設(shè)置的內(nèi)存能暫時(shí)容得下插入的數(shù)據(jù),COMMIT可以盡量設(shè)高一點(diǎn)(kettle有限制不能超過50000)
kettle中的一些常見問題
1. 關(guān)于kettle中的Java腳本值得注意的地方
Java script是一行一行執(zhí)行的派任,當(dāng)我們?cè)谀_本中使用了判斷砸逊,而當(dāng)某一行數(shù)據(jù)沒有符合條件時(shí),腳本中的變量將是保持上一行的值
正確的做法在Java腳本書寫中掌逛,補(bǔ)充完整的條件語句师逸,即不要省略esle分支,或者在開頭定義xx并賦默認(rèn)值豆混。如:
2. moji字符問題
moji字符無法寫入Mysql數(shù)據(jù)庫問題, 在數(shù)據(jù)庫連接高級(jí)中寫入 set names utf8mb4
;