kettle的正常转换速度
场景 | 正常 | 不正常 |
---|---|---|
数据库操作 | 3k-2w条/秒 | 3k以下 |
文件操作 | 2w条以上 | 1w条以下、 |
网络操作 | 比数据库慢 |
容易产生性能问题的场景
1. 查询类:
数据库查询:数据库查询、数据库连接、插入更新
Web查询 :http/get/set webservice
2.计算类
格式转换(字节与字符互相转换,日期)、
转换一般用计算器和JavaScript方法。
3.排序类
排序、合并连接(依赖于排序)、分组(依赖于排序)
kettle调优
1. 设置Rowset
Rowset是两个步骤之间的缓存(大小可以自己设置)
如何找到性能瓶颈:观察Rowset,运行ktr文件时观察下面的窗口值(100/0表示输入100条记录,输出0条记录。如果输入远大于输出,就说明这个步骤来不及处理,就是瓶颈。)
Rowset值的设置: 编辑》设置》杂项》记录集合里的记录数》10000,表示缓存里的最大记录数就是10000
2. 合理增加索引
数据库查询:尽可能多的使用相等=判断来筛选数据;如果是等值查询,表就建hash索引;如果是比较查询,就建B树索引
增加复制数:查询类。多线程,2-8个线程一个步骤。具体自己调整。
3. 提高Kettle的写入速度
配置数据库连接:
useServerPrepStmts = false
rewriteBatchedStatements = true
useCompression=true
defaultFetchSize=10000 ##默认1w
4. 提高kettle的读取速度
useServerPrepStmts=true
cachePrepStmts=true
5. 设置步骤运行拷贝数
kettle转换在执行时,每一个步骤可被看成一个带着输入、输出行队列的工作线程,每一个线程是并行执行的。kettles可以同时针对每一个独立步骤手工定义其线程数。右键设置拷贝数。
6. 设置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给自己分配的非堆栈内存(供虚拟机程序自己开销),一般来说网上参考是最大堆栈内存不超过总内存的3/8有的也说是一半,可以根据需要设置。
7. 避免抽数的源数据库关键字段索引在SPOON里面失效
网上搜索了这种明明应该走 但是并没有走索引的情况:
1. 使用<> (有的时候单独的使用< 或者>的时候也有可能)
2. like的时候不能确定最前面的字符也就是把’%_’的时候
3. 单独使用复合索引的非前导列
4. 表没有分析,字符类型不匹配 发生了显式的或者隐式的转换或者对索引列进行了运算
5. 使用了 not in 或者 not exist
8. 减少目的索引
目的地数据库表的索引太多,这个原因显而易见,因为插入数据的时候会重新更新索引表,索引太多,插入时候会变慢。
9. 增大commit数量
插入流程中数据COMMIT过程太频繁,数据插入的COMMIT太频繁也是很影响效率的,20W的数据提交200次和提交20次速度显然是不一样,只要你的设置的内存能暂时容得下插入的数据,COMMIT可以尽量设高一点(kettle有限制不能超过50000)
kettle中的一些常见问题
1. 关于kettle中的Java脚本值得注意的地方
Java script是一行一行执行的,当我们在脚本中使用了判断,而当某一行数据没有符合条件时,脚本中的变量将是保持上一行的值
正确的做法在Java脚本书写中,补充完整的条件语句,即不要省略esle分支,或者在开头定义xx并赋默认值。如:
2. moji字符问题
moji字符无法写入Mysql数据库问题, 在数据库连接高级中写入 set names utf8mb4
;
网友评论