版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xpliruizhi123/article/details/54580850

最近发现KETTLE抽数越来越慢,特别是增量INSERT/UPDATE的时候,速度已经达到了令人发指的地步(从一个400W数据规模的表中每天增量量抽取30W数据的TRASFORMATION 竟然要20个小时!!!!读取速率是5条/s......),这个情况是在我的KETTLE工具从3.2升级到7.0版本后发现的,(以前也慢,只是还能接受,升级之后已经到了不改不行的地步了),但是KETTLE是进步的,所以原因还是要从自身找起。

目前为止我发现的导致KETTLE抽取数据慢有以下几个原因:

A:SPOON 启动时候内存较小,在spoon.bat这个启动文件中,配置的有JVM的内存XMX,("%PENTAHO_DI_JAVA_OPTIONS%"=="" set PENTAHO_DI_JAVA_OPTIONS="-           Xms8192m" "-Xmx8192m" "-XX:MaxPermSize=4096m"),默认这个是256M,512M  256M, 其中Xms是指JVM初始分配的堆栈的内存,Xmx是指JVM分配的堆栈的内存 (JAVA代码能涉及到的存储数据变量的内存)最大是多少,所以XMS必须要<= XMX,XX:MaxPermSize,是指JVM给自己分配的非堆栈内存(供虚拟机程序自己开销)我的因 为是在服务器上跑,因此改成了8192M\8192M\4096M,这个改不能是无限的加大,需要考虑总的内存大小,一般来说网上参考是最大堆栈内存不超过总内存的3/8有的也说是 一半,总之得有个度。

B:抽数的源数据库关键字段没有索引,以我这张表为例,我每天需要按照日期(data_update_date)从DB2增量抽取更新数据,但是这个字段没有建索引,因此也会导致抽数慢。

C:抽数的源数据库关键字段索引在SPOON里面失效,给大家看两段SQL就知道了:

SQL1:select TO_CHAR(TO_DATE(t_date,'YYYYMMDD')+1,'YYYYMMDD') from delta_table where t_name='~~~'

SELECT * FROM SAPCP1.ZCSSDH053 WHERE REPORT_CREATE_DATE >= ?

SQL2:select    t_date   from delta_table where t_name='~~~'

SELECT * FROM SAPCP1.ZCSSDH053 WHERE REPORT_CREATE_DATE >  ?

两段SQL执行的都是相同的数据提取过程,但是在REPORT_CREATE_DATE 字段建立索引的情况下,SQL1比SQL2快20倍。原因是用 > 号的时候,索引会失效,而用>=则不会。

于是我在网上搜索了这种明明应该走 但是并没有走索引的情况(以下是粘贴的)
                            使用<> (有的时候单独的使用< 或者>的时候也有可能)
                            like的时候不能确定最前面的字符 也就是把’%_’的时候
                            单独使用复合索引的非前导列
                           表没有分析
                           字符类型不匹配 发生了显示的或者隐式的转换或者对索引列进行了运算
                            使用了 not in 或者 not exist
                           基于cbo时全表扫描代价小
                            b-tree索引is not null的时候会走,is not null的时候不会走 位图的时候都会 复合索引的时候 is not null会 is null时要看前导列

D:目的地数据库表的索引太多,这个原因显而易见,因为插入数据的时候会重新更新索引表,索引太多,插入时候会变慢。

E:插入流程中数据COMMIT过程太频繁,数据插入的COMMIT太频繁也是很影响效率的,,30W的数据提交300次和提交30次速度显然是不一样的,只要你的设置的内存能暂时容得下插入的数据,COMMIT可以尽量设高一点(kettle有限制不能超过50000)

F:INSERT/UPDATE  过程与
表输入,这两个流程肯定是后者快很多,但是笔者在实际过程中会遇到一个问题就是,万一ETL抽数流程的某个环节发生了错误,导致ETL后面的流程DUMP掉,要么没插入要么部分插入,这样的话,肯定是没有更新关键字段的。(关键字段更新是放在所有流程最后一步),这样的话,当笔者解决掉这个问题重新启动流程,如果重头开始,对于INSERT/UPDATE字段没什么问题,数据重复会进行更新,但是对于表输入的话,就会有问题,昨天写入的数据已经存在了,这样不作处理肯定还会报错。KETTLE
7.0
解决了这个问题,在JOB层设计的时候提前设定好失败数据回滚的操作,在回滚的操作里面删掉已经插入的数据,这样的话用表输入就没有后顾之忧了。

最后,30W数据进过以上优化时间从20个小时缩短到0.5个小时~~我暂时发现这些优化方式,各位高人有其他方法欢迎交流~~~!!!!

kettle 数据提取效率提升的更多相关文章

  1. 有些有IP的项目,公司不至于测试不行砍项目,但是会砍项目组,把IP收回交给别的团队做(因为一旦一测数据太差,公司(投资人)会判断在二测的时候数据能提升到什么样。说白了就是历史信用问题)

    作者:匿名用户链接:https://www.zhihu.com/question/309778033/answer/579761064来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...

  2. kettle 数据抽取时会出现 无法插入NULL

    kettle 数据抽取时会出现 无法插入NULL,其实是空字符串,原因是kettle默认不区分空字符串和NULL. 解决办法: 修改kettle.properties 文件:

  3. kettle 数据迁移 (转)

    最近在公司搞一个项目重构迁移问题,旧项目一直在线上跑,重构的项目则还没上线.重构之后数据库表结构,字段,类型等都有变化,而且重构的数据库由oracl改为mysql.这样就设计到数据迁移问题,别人推荐下 ...

  4. kettle 数据迁移

    最近在公司搞一个项目重构迁移问题,旧项目一直在线上跑,重构的项目则还没上线.重构之后数据库表结构,字段,类型等都有变化,而且重构的数据库由oracl改为mysql.这样就设计到数据迁移问题,别人推荐下 ...

  5. Kettle数据同步速度调优记录

    Msyql到Vertica 1.mysql中在openshop 数据库中选择其中一个300W左右数据的表 create table ip_records_tmp_01 AS SELECT * FROM ...

  6. ETL kettle 数据调取防止意外停止处理

    pentaho kettle是目前使用比较广泛的一种etl工具 但是在使用的时候如做定时任务 会存在如果任务异常停止会发生数据不准或者丢失数据的情况 这种情况在<Pentho Kettle So ...

  7. kettle数据同步

    通过kettle实现两张表的数据同步,具体设计如下:

  8. Kettle数据抽取解决方案

    一. Kettle介绍 1. Kettle简介 ETL即数据抽取(Extract).转换(Transform).装载(Load)的过程.Kettle的中文翻译为水壶.Kettle以元数据驱动的方式提供 ...

  9. KETTLE数据上传

    1.     KETTLE简介 一种ETL工具,ETL,是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过抽取(extract).转换(transform).加载(l ...

随机推荐

  1. 转 Spring Boot之No session repository could be auto-configured, check your configuration问题解决

    1.  环境介绍 JDK 1.8  Spring-Boot 1.5.1.RELEASE, STS IDE 2.  问题的提出 创建了一个非常简约的Spring Boot Web Application ...

  2. python中使用pillow绘制汉字

    # pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pillow from PIL import Image, ImageFont, I ...

  3. NET-知识点:C#中Equals和==比较

    第一.相等性比较 其实这个问题的的本质就是C#的相等比较,相等比较可以分两类: 1.引用相等性,引用相等性指两个对象引用均引用同一基础对象. 2.值相等性,值相等性指两个对象包含相同的一个或多个值,其 ...

  4. js字符串驼峰和下划线互相转换

    // 下划线转换驼峰 function toHump(name) { return name.replace(/\_(\w)/g, function(all, letter){ return lett ...

  5. PHP编辑器分享

    Sublime 1 .安装了追踪插件,ctrl+鼠标左键点击PHP函数跳到函数声明的位置. 2.已汉化 链接:http://pan.baidu.com/s/1hs5qonE 密码:b8fw 相关文章: ...

  6. 解决Flume向Kafka多分区写数据

    1  问题背景 Flume向kafka发布数据时,发现kafka接收到的数据总是在一个partition中,而我们希望发布来的数据在所有的partition平均分布 2 解决办法 Flume的官方文档 ...

  7. 洛谷P3398 仓鼠找sugar [LCA]

    题目传送门 仓鼠找sugar 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而 ...

  8. [USACO16JAN]子共七Subsequences Summing to Sevens

    [USACO16JAN]子共七Subsequences Summing to Sevensa[i]表示前缀和如果a[i]%7==t&&a[j]%7==t那么a[j]-a[i-1]一定是 ...

  9. NLP自然语言处理系列5-支持向量机(SVM)

    1.什么是支持向量机 支持向量机(Support Vector Machine,SVM)是一种经典的分类模型,在早期的文档分类等领域有一定的应用.了解SVM的推导过程是一个充满乐趣和挑战的过程,耐心的 ...

  10. 对怎样充分利用安卓官方开发网站的一个简单性介绍介绍-https://developer.android.google.cn/docs/

    一,谷歌的安卓官方网站-https://developer.android.google.cn/docs/ ,在网站里面可以查询开发文档,开发指导,设计原则,制作app的例子等等,无论对于新手还是老手 ...