zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    可视化工具Navicat 视图 事物 存储过程
    mysql用户管理 + pymysql的使用
    0914 表与表之间的关系补充一对一关系 记录操作 关键字 多对多 子查询
    0913数据库约束之主键 外键 非空 默认值约束 唯一约束 级联操作 表与表之间的联系
    数据库的数据类型
    面向对象之继承
    面向对象
    re模块
    加密常用模块
    日志模块
  • 原文地址:https://www.cnblogs.com/kenwong/p/4618006.html
Copyright © 2011-2022 走看看