Kettle性能调优汇总

       性能调优在整个工程中是很是重要的,也是很是有必要的。但有的时候咱们每每都不知道如何对性能进行调优。其实性能调优主要分两个方面:一方面是硬件调优,一方面是软件调优。本章主要是介绍Kettle的性能优化及效率提高。html

1、Kettle调优java

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

修改脚本代码片断sql

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函数

 2  调整提交(Commit)记录数大小进行优化post

如修改RotKang_Test01中的表输出组件中的提交记录数量参数进行优化,Kettle默认Commit数量为:1000,能够根据数据量大小来设置Commitsize1000~50000性能

3  调整记录集合里的记录数

4、尽可能使用数据库链接池;

5、尽可能提升批处理的commit size

6、尽可能使用缓存,缓存尽可能大一些(主要是文本文件和数据流);

7KettleJava作的,尽可能用大一点的内存参数启动Kettle

8、可使用sql来作的一些操做尽可能用sql

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

9、插入大量数据的时候尽可能把索引删掉;

10、尽可能避免使用update , delete操做,尤为是update,若是能够把update变成先delete,  insert

11、能使用truncate table的时候,就不要使用deleteall row这种相似sql合理的分区,若是删除操做是基于某一个分区的,就不要使用delete row这种方式(不论是deletesql仍是delete步骤),直接把分区drop掉,再从新建立;

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

13、尽可能使用数据库原生的方式装载文本文件(Oraclesqlloader, mysqlbulk loader步骤)

14、尽可能不要用kettlecalculate计算步骤,能用数据库自己的sql就用sql ,不能用sql就尽可能想办法用procedure,实在不行才是calculate步骤;

15、要知道你的性能瓶颈在哪,可能有时候你使用了不恰当的方式,致使整个操做都变慢,观察kettle log生成的方式来了解你的ETL操做最慢的地方;

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

2、索引的正确使用

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的记录。

3、数据抽取的SQL优化

1Where子句中的链接顺序。

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

3、尽可能多使用COMMIT

4、用EXISTS替代IN

5、用NOT EXISTS替代NOT IN

6、优化GROUP BY

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

8、分离表和索引。
相关文章
相关标签/搜索