性能调优在整个项目中尤为重要。对于初级开发人员往往都不知道如何对性能进行调优。其实性能调优主要分为两个方面:一方面是硬件方面的调优,一方面是软件方面的调优。本文章主要介绍Kettle方面的性能调优以及效率的提升。
一、Kettle组件调优
1. commit size
表输出的提交记录数量(默认1000),具体根据数量大小来修改。
修改前速度(7447/s):
修改后(7992/s):
2. 数据库连接调参
基于上层优化方案继续调优
useServerPrepStmts=false
rewriteBatchedStatements=true
useCompression=true
添加参数后(20361/s):
3. Kettle并行
右击 “START组件” 勾选Run Next Entries in Parallel
选择I understand
最终图:
结果图(可以看到每秒的表输出量已经起飞~~~):
70W的数据仅用30S的时间就插入完成。
二、Kettle参数调优
- 调整JVM大小进行性能优化,修改Kettle定时任务中的Spoon脚本。
参数 | 描述 |
---|---|
-Xmx1024m | 设置JVM最大可用内存为1024M。 |
-Xms512m | 设置JVM促使内存为512m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。 |
-Xmn2g(JVM) | 设置年轻代大小为2G。整个JVM内存大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。 |
-Xss128(JVM) | 设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。 |
Spoon参数位置:if "%PENTAHO_DI_JAVA_OPTIONS%"=="" set PENTAHO_DI_JAVA_OPTIONS="-Xms512m" "-Xmx512m" "-XX:MaxPermSize=128m" |
三、 Kettle其他优化
- 尽量使用SQL语句、尽可能的不适用组件。
- Kettle是基于Java制作的,尽可能的用较大的内存来启动Kettle
- 尽可能的使用同一主机来进行ETL操作(本地-本地/服务器-服务器),本地-服务器传输网络波动会有一定的影响
- 使用数据库资源库便于对作业、转换的管理与应用。
- 尽可能的输入少量的数据集(没用的字段不抽取)
- 插入大量数据时把索引删掉,待数据全量插入完成后再进行创建索引。