Kettle數據同步速度調優記錄


 

Msyql到Vertica

1、mysql中在openshop 數據庫中選擇其中一個300W左右數據的表

create table ip_records_tmp_01

AS

SELECT * FROM ip_records_tmp t

WHERE t.datetime<= '2015-05-01'

2、vertica創建表ip_records_tmp_01,注意字段類型和mysql有點不一樣。

全量抽取2478130條數據,耗時30s,速度不錯!

 

3、在mysql中新增972948條數據,刪除462151條數據,更新273427條數據

新增:

insert into ip_records_tmp_01

select  *  from ip_records_tmp t

where t.`datetime` > '2015-05-01';

刪除:

delete from ip_records_tmp_01

where `datetime` <= '2015-05-01' and `datetime` >'2015-04-01';

更新:

update ip_records_tmp_01

    set remark1 ='INMAN',remark2 ='LEFTLIFE'

where 

 `datetime` <= '2015-04-01' AND `datetime` >'2015-03-01'

 

增量抽取,耗時2h 3mn 33s,速度不能接受。

 

調試1,利用時間戳

利用時間戳來增量抽取數據,針對數據允許的情況優先考慮,但是不排除時間戳無法實施的情況,所以還需尋找其他方法。

調試2,建立索引

從mysql到sqlserver數據表和數據量都一致的情況下的截圖:

全量抽取,耗時42S

 

對sqlserver的表建立索引,增量抽取數據,耗時10mn 50s,速度也還算可以。

 

於是在vertica中建立類似索引的projection,效果不理想,速度沒見明顯提高,所以不截圖,這次調優也不行。

調試3,臨時表+運行腳本

全量抽取,耗時32s

 

增量抽取,耗時1mn 48s,速度有大幅度提升。

 

 

一些錯誤解決方法

Kettle內存溢出 out of memory

解決方法:調整kettle調用java的JVM內存大小,修改spoon.bat文件中的

if "%PENTAHO_DI_JAVA_OPTIONS%"=="" set PENTAHO_DI_JAVA_OPTIONS="-Xmx4096m" "-XX:MaxPermSize=4096m"

把內存調大,運行大數據量排序時,如果不調整內存,kettle會崩潰!

[Vertica][VJDBC](5156):READ COMMITTED

[Vertica][VJDBC](5156) ERROR: Unavailable: initiator locks for query - Locking failure: Timed out X locking Table .Your current transaction isolation level is READ COMMITTED

解決方法:由於刪除和插入/更新的事務互鎖,將更新控件中提交記錄數量由10000減少到1000,刪除控件中的提交記錄數量由1000減少到100。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM