一魂奥、提高傳輸數(shù)據(jù)同步效率
1.數(shù)據(jù)庫(kù)連接增加以下配置
useServerPrepStmts=false
rewriteBatchedStatements=true
useCompression=true
oracle讀取慢添加:
在選項(xiàng)中添加defaultRowPrefetch解滓,值設(shè)置為10000以上,具體是數(shù)據(jù)庫(kù)情況而定
圖片.png
2.使用連接池
注意:使用連接池后, 在第一次創(chuàng)建連接池后不會(huì)隨著該kettle任務(wù)線程結(jié)束銷毀線程池, 而是與項(xiàng)目的生命周期保持一致, 可以使用jobMeta.clear();方法銷毀連接池;
樓主遇到的坑:同步過(guò)程中使用的線程池中的連接失效導(dǎo)致線程無(wú)法釋放, 再次重啟還是使用失效的連接, 最終只能重啟項(xiàng)目銷毀線程池
圖片.png
二晌区、0000-00-00 00:00:00值字段同步異常
kettle報(bào)錯(cuò)信息: can not be represented as java.sql.Timestamp
解決方案:
zeroDateTimeBehavior=convertToNull
圖片.png
三、跑大數(shù)據(jù)量,內(nèi)存溢出
1.kettle在同步以job為單位, job不執(zhí)行完 不釋放內(nèi)存.
建議: 大數(shù)據(jù)量時(shí)分批跑, 例如按照id/時(shí)間進(jìn)行分片執(zhí)行, 使用連接池并且java在初始化JobMeta時(shí)只初始化一次.