版权声明:本文为博主原创文章,未经博主允许不得转载。 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. 2021年秋季学期“大数据能力提升项目”证书办理及领取通知

    同学们,2021年秋季学期第2次证书办理工作即将开启.请满足办理证书条件的同学,按时提交申请材料.具体通知如下: [办理流程] 1. 自行再次确认报名大数据能力提升项目年份(2019年及之前.2020 ...

  2. 通知 | “大数据能力提升项目”证书办理及领取(2021年秋季学期)

    同学们,2021年秋季学期第1次证书办理工作即将开启.请满足办理证书条件的同学,按时提交申请材料.具体通知如下: [办理流程] 1. 自行再次确认报名大数据能力提升项目年份(2019年及之前.2020 ...

  3. 打造交叉复合型数据人才的高地:清华大学大数据能力提升项目宣讲会成功举行!...

    2021年8月30日晚,由清华大学研究生院和清华大学大数据研究中心(以下简称:中心)共同举办的清华大学大数据能力提升项目(以下简称:项目)新生宣讲会在清华大学东阶火热开启.虽然疫情期间大多数学生尚未返 ...

  4. 报名 | 清华大学大数据能力提升项目开始报名啦!(2021秋)

    清华的小伙伴们看过来,听说校内有一个能力提升项目备受各院系师生推崇,因为它: 群星璀璨--项目吸引了25个院系的名师加盟: 人气超高--历年报名同学累计近3000人,几乎涵盖校内所有院系: 校企联动- ...

  5. 2021年夏季学期“清华大学大数据能力提升项目” 招募《大数据实践课》企业合作项目...

    什么是大数据能力提升项目? 在全球大数据浪潮中,2014年清华大学大数据能力提升项目依托信息学院.经管学院.公管学院.社科学院.交叉信息研究院.五道口金融学院.深圳研究生院共7个学院协同共建,通过多学 ...

  6. 大数据能力提升项目| 学生成果展系列之三

    导读 为了发挥清华大学多学科优势,搭建跨学科交叉融合平台,创新跨学科交叉培养模式,培养具有大数据思维和应用创新的"π"型人才,由清华大学研究生院.清华大学大数据研究中心及相关院系共 ...

  7. 大数据能力提升项目| 学生成果展系列之二

    导读 为了发挥清华大学多学科优势,搭建跨学科交叉融合平台,创新跨学科交叉培养模式,培养具有大数据思维和应用创新的"π"型人才,由清华大学研究生院.清华大学大数据研究中心及相关院系共 ...

  8. 大数据能力提升项目| 学生成果展系列之一

    导读 为了发挥清华大学多学科优势,搭建跨学科交叉融合平台,创新跨学科交叉培养模式,培养具有大数据思维和应用创新的"π"型人才,由清华大学研究生院.清华大学大数据研究中心及相关院系共 ...

  9. 报名 | 清华大学大数据能力提升项目报名指南 (2020秋)

    一. 项目定位 在全球大数据浪潮中,清华大学大数据能力提升项目在"学校统筹,问题引导,社科突破,商科优势,工科整合,业界联盟"的指导原则下,通过多学科交叉融合的大数据课程体系,引入 ...

最新文章

  1. android跳转应用市场搜索,Android 应用中跳转到应用市场评分
  2. Android 启动模式简介
  3. linux无法创建符号链接 权限不够_Linux 基本命令(看完就会系列)
  4. 信息系统项目管理师优秀论文:项目采购管理
  5. Es-nested嵌入式属性
  6. Boost:演示如何计算加权统计信息
  7. 2020年第十一届蓝桥杯 - 国赛 - Python大学组 - H.答疑
  8. 2020\Simulation_1\6.递增三元组
  9. springboot 配置webservice接口
  10. 计算机桌面设置定时,如何设置可以每月自动变化的日历桌面?
  11. JVM优化系列-详解JVM堆内存分析
  12. n-1 java_【Java】 剑指offer(53-2) 0到n-1中缺失的数字
  13. 你了解node多进程吗
  14. 在RedHat下安装MPlayer
  15. 输出halloword
  16. 使用Standford coreNLP进行中文命名实体识别(NER)
  17. VB.NET实现文件上传下载
  18. disjoint MATLAB,matlab 计算李雅普诺夫指数的方法集合
  19. 前端改好,验证码显示不出来!!
  20. ffmpeg 用于转换视频格式的各种命令行

热门文章

  1. AndroidStudio安卓原生开发_activity之间复杂对象类型的数据传递---Android原生开发工作笔记92
  2. 大数据之-Hadoop完全分布式_SCP案例_同时在1000台服务器上安装JDK_配置环境变量---大数据之hadoop工作笔记0031
  3. k8s集群部署项目_容器交付流程介绍---K8S_Google工作笔记0059
  4. HTML img 标签的 alt 属性
  5. mybatis延迟加载(lazy)配置生效的陷阱
  6. No input file specified的解决方法
  7. [Rust]cargo run时error: linker `link.exe` not found
  8. MFC中从一个类向其他类发送消息的方法
  9. 随想录(从DO-178C和ARINC653想到的)
  10. java 保存 设置_如何在菜单中保存设置