Kettle性能调优汇总

简介: Kettle性能调优汇总

Kettle性能优化是一个系统工程,不仅涉及工具本身的优化,更涉及ETL工具之外的诸多因素,比如,ETL要读取数据库,那么目标DMBS的性能,SQL语句,网络等相关因素都影响到执行效率。根据Kettle对数据ETL的过程性能调优,主要取决于三个因素:上游渠道,工具的大小与数量,下游渠道。


一 Kettle调优


  1. 调整JVM大小进行性能优化,修改Kettle定时任务中的Kitchen或Pan或Spoon脚本。

Kettle是Java做的,尽量用大一点的内存参数启动Kettle;

##修改脚本代码片段
set OPT=-Xmx512m -cp %CLASSPATH%  -Djava.library.path=libswt\win32\ -DKETTLE_HOME="%KETTLE_HOME%"  -DKETTLE_REPOSITORY="%KETTLE_REPOSITORY%"  -DKETTLE_USER="%KETTLE_USER%"  -DKETTLE_PASSWORD="%KETTLE_PASSWORD%"  -DKETTLE_PLUGIN_PACKAGES="%KETTLE_PLUGIN_PACKAGES%"  -DKETTLE_LOG_SIZE_LIMIT="%KETTLE_LOG_SIZE_LIMIT%"
##参数参考:
-Xmx1024m:设置JVM最大可用内存为1024M。
-Xms512m:设置JVM促使内存为512m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-Xmn2g:设置年轻代大小为2G。整个JVM内存大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
-Xss128k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。
##样例:
OPT=-Xmx1024m -Xms512m


  1. 调整提交(Commit)记录数大小进行优化(尽量提高批处理的commit size)

如修改“表输出”组件中的“提交记录数量”参数进行优化,Kettle默认Commit数量为:1000,可以根据数据量大小来设置Commitsize:1000~50000。


网络异常,图片无法展示
|


clipboard.png


  1. 调整记录集合里的记录数(RowSet)


RowSet是两个步骤之间的缓存.


性能调优的关键是如何找到性能瓶颈:一个重要的方法就是观察RowSet.如下图所示,当左边的in大于右边的out的位置时,很可能就是性能瓶颈的位置.(也可以通过单个执行最长的步骤来确定性能瓶颈.)


网络异常,图片无法展示
|


clipboard.png


通过点击转换空白处,可以调整rowset的大小.


网络异常,图片无法展示
|


clipboard.png


调整之后,执行效果如下:

网络异常,图片无法展示
|


clipboard.png


  1. 调整转换动作的并发处理数(改变开始复制的数量)


注意:此种方式要用在适合并发操作的场景,比如查询类,要注意死锁问题.

当调整rowset大小之后,性能效果仍不明显的话,可以尝试调整转换动作的并发处理数,比如以下转换操作在"数据库查询"处出现性能瓶颈.


网络异常,图片无法展示
|


clipboard.png


调整并发处理数:(一般设置成2-8个)


网络异常,图片无法展示
|


clipboard.png


执行情况如下图所示,速度明显提高了很多.


网络异常,图片无法展示
|


clipboard.png


5. 使用集群,尤其是对于查询类,运算类,排序等;


6. 更换其他实现方式,如js使用java类或插件;


7. 注意日志级别(Rowlevel日志的性能会严重下降,是Basic的1/10);


8. 注意死锁问题:数据库死锁(读写同一张表)和转换本身死锁;


9. 尽量使用数据库连接池;

使用数据库连接池,可以在一定程度上提高速度.如何查看是否使用了数据库连接池?(这个在详细日志中可以看到,使用了连接池).


10. 尽量使用缓存,缓存尽量大一些(主要是文本文件和数据流),比如排序;


11. 合适的使用数据库索引,尤其对于数据库查询类.具体可以参考[索引的正确使用];


12. 可以使用sql来做的一些操作尽量用sql;

Group , merge , stream lookup,split field这些操作都是比较慢的,想办法避免他们.,能用sql就用sql;


13. 插入大量数据的时候尽量把索引删掉;


14. 尽量避免使用update , delete操作,尤其是update,如果可以把update变成先delete,  后insert;


15. 能使用truncate table的时候,就不要使用deleteall row这种类似sql合理的分区,如果删除操作是基于某一个分区的,就不要使用delete row这种方式(不管是deletesql还是delete步骤),直接把分区drop掉,再重新创建;


16. 尽量缩小输入的数据集的大小(增量更新也是为了这个目的);


17. 尽量使用数据库原生的方式装载文本文件(Oracle的sqlloader, mysql的bulk loader步骤);


18. 尽量不要用kettle的calculate计算步骤,能用数据库本身的sql就用sql ,不能用sql就尽量想办法用procedure,实在不行才是calculate步骤;


19. 远程数据库用文件+FTP的方式来传数据,文件要压缩。(只要不是局域网都可以认为是远程连接)。


20. 在确保结果输出正确的情况下,能使用并行处理的就不要使用串行处理.


二 索引的正确使用


在ETL过程中的索引需要遵循以下使用原则:


1、当插入的数据为数据表中的记录数量10%以上时,首先需要删除该表的索引来提高数据的插入效率,当数据全部插入后再建立索引。


2、避免在索引列上使用函数或计算,在where子句中,如果索引列是函数的一部分,优化器将不使用索引而使用全表扫描。


3、避免在索引列上使用 NOT和 “!=”,索引只能告诉什么存在于表中,而不能告诉什么不存在于表中,当数据库遇到NOT和 “!=”时,就会停止使用索引转而执行全表扫描。


4、索引列上用 >=替代 >

高效:select * from temp where deptno>=4
  低效:select * from temp where deptno>3


两者的区别在于,前者DBMS将直接跳到第一个DEPT等于4的记录而后者将首先定位到DEPTNO=3的记录并且向前扫描到第一个DEPT大于3的记录。


三 数据抽取的SQL优化


1、Where子句中的连接顺序。


2、删除全表是用TRUNCATE替代DELETE。


3、尽量多使用COMMIT。


4、用EXISTS替代IN。


5、用NOT EXISTS替代NOT IN。


6、优化GROUP BY。


7、有条件的使用UNION-ALL替换UNION。


8、分离表和索引。

相关文章
|
7月前
|
SQL 分布式计算 监控
Sqoop数据迁移工具使用与优化技巧:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入解析Sqoop的使用、优化及面试策略。内容涵盖Sqoop基础,包括安装配置、命令行操作、与Hadoop生态集成和连接器配置。讨论数据迁移优化技巧,如数据切分、压缩编码、转换过滤及性能监控。此外,还涉及面试中对Sqoop与其他ETL工具的对比、实际项目挑战及未来发展趋势的讨论。通过代码示例展示了从MySQL到HDFS的数据迁移。本文旨在帮助读者在面试中展现Sqoop技术实力。
552 2
|
7月前
|
调度
kettle开发篇-写日志
kettle开发篇-写日志
496 0
|
7月前
|
JavaScript 前端开发 Java
kettle开发篇-作业
kettle开发篇-作业
101 0
|
5月前
|
监控 Java 数据库连接
Java开发者的实用性能调优技巧与工具
Java开发者的实用性能调优技巧与工具
|
7月前
|
关系型数据库 MySQL 大数据
程序员小sister的烦恼_快速上手大数据ETL神器Kettle(xls导入mysql)
程序员小sister的烦恼_快速上手大数据ETL神器Kettle(xls导入mysql)
110 0
|
数据采集 Java 关系型数据库
企业实战(20)ETL数据库迁移工具Kettle的安装配置详解
企业实战(20)ETL数据库迁移工具Kettle的安装配置详解
522 0
|
SQL 关系型数据库 MySQL
MySQL数据库调优进阶详解
MySQL数据库调优进阶详解
345 0
|
Oracle Java 关系型数据库
Kettle 常见问题解决方案
JDK版本大于1.8时非常不稳定,表现在无法新建连接DB数据库,会出现无响应。
|
存储 Oracle 架构师
「集成架构」Talend ETL 性能调优宝典
「集成架构」Talend ETL 性能调优宝典
|
数据采集 Oracle 关系型数据库
Kettle入门(一)
Kettle入门(一)
424 0
Kettle入门(一)