一、当输入对象为CSV文件时,将NIO Buffer Size从默认的50000改到最佳的200000。
二、当输出对象为表输出时,将提交记录数量从默认的1000改到最佳的4000。
三、尽可能关闭转换过程中一切与数据库相关的日志,如表日志、索引日志等。
四、在数据库去重时,使用普通索引而不是唯一性索引。
五、在插入数据之前,先使索引unusable,数据导完之后再rebuild索引。需要注意的是,像数据库去重这种需要索引来优化查询速度的情况可以排除在外。
六、索引和表数据使用不同的表空间,尽可能的减少IO争用。
七、Kettle所在操作系统优先选择Windows,在有些情况下Linux的插入速度明显偏低。
八、尽量使用数据库连接池
九、尽量提高批处理的'commit size'
十、尽量使用缓存,缓存尽量大一些
十一、Kettle 是Java 做的,尽量用大一点的内存参数启动Kettle.
十二、可以使用sql 来做的一些操作尽量用sql
十三、 'Group , merge , stream lookup ,split field' 这些操作都是比较慢的,想办法避免他们。
十四、插入大量数据的时候尽量把索引删掉
十五、尽量避免使用update , delete 操作,尤其是update , 如果可以把update 变成先delete ,后insert。
十六、能使用truncate table 的时候,就不要使用delete all row 这种类似sql
十七、如果删除操作是基于某一个分区的,就不要使用delete row 这种方式(不管是delete sql 还是delete 步骤),直接把分区drop 掉,再重新创建
十八、尽量缩小输入的数据集的大小(增量更新也是为了这个目的)
十九、尽量使用数据库原生的方式装载文本文件(Oracle 的sqlloader , mysql 的bulk loader 步骤)
二十、尽量不要用kettle 的calculate 计算步骤,能用数据库本身的sql 就用sql ,不能用sql 就尽量想办法用procedure , 实在不行才是calculate 步骤。