加入了一个数据汇聚分析展示的项目,其中数据抽取是一个很重要的环节,我接手之后发现kettle抽取速度越来越慢,不知道是服务器不给力还是数据库压力太大什么原因,在线搜索了很多优化方案:
1.调整JVM大小进行性能优化,修改Kettle定时任务中的Kitchen或Pan或Spoon脚本(选中kettle图标-->右键-->编辑,修改参数设置);
2、 调整提交(Commit)记录数大小进行优化;
如修改“表输出”组件中的“提交记录数量”参数进行优化,Kettle默认Commit数量为:1000,可以根据数据量大小来设置Commitsize:1000~50000;
3、 调整记录集合里的记录数;
4、尽量使用数据库连接池;
5、可以使用sql来做的一些操作尽量用sql;
Group , merge , stream lookup,split field这些操作都是比较慢的,想办法避免他们.,能用sql就用sql;
6、插入大量数据的时候尽量把索引删掉;
7、尽量避免使用update , delete操作,尤其是update,如果可以把update变成先delete, 后insert;
这些都做了,发现依然没有很大的改善,后来发现是我没有注意第“5”条,下面就来说说具体的操作方式(主要是主键对比去增量抽取):
可以看到日志日期里面完成整个过程只需要95秒,我这张目标表有大概65万的数据库,表中有一百二十多