本文链接:https://blog.csdn.net/qq_37124304/article/details/82664665
由于Kettle提高表输出写入速度太低,每秒速度三四十,实在忍受不了,参考一些资料之后进行了以下改变,我只进行了第一项的速度每秒五六千,加上其他的测试速度有达到3万多,有一分钟二十多万的记录,没测试极限,下为更改的地方:
NO.1
mysql表输出的时候出现减速的原因可能是因为网络链接的属性设置
在此处添加参数:
useServerPrepStmts=false
rewriteBatchedStatements=true
useCompression=true
如图:
NO.2
kettle 允许线程多开(此处性能提升有限,可辅助查看性能瓶颈所在)
NO.3
也可以适当的提高数据集的大小
此处未改,不同的MySQL数据库版本好似有数据传输限制会报Prepared statement contains too many placeholders,我用的是5.7的没有出现这个错误
NO.4
提高每次表输出的提交量
更改大小视机器的内存大小改变,
最后的
kettle还可以并发处理job
Kettle中ETL的效率优化
https://www.jianshu.com/p/66cefe5208a7
数据库配置
连接池配置
数据库连接池在业务数据量比较多,而且短连接很多的时候适合配置。在这个时候,每次数据库连接建立和断开所花费的时间远长于进行数据库操作的时间,配置连接池可以更好的利用网络资源,将连接建立和断开的开销降低到最小。因此在大多数情况下,配置Kettle数据库连接池均可提高ETL的性能,如果没有配置连接池,那么在数据量大时候很容易出现Error Connecting Database Error。
该设置主要是在创建及管理连接的部分:
数据库连接 -> 连接池 -> 使用连接池
设置连接池的大小及相应参数,这些参数需要根据数据库实际情况及使用情况进行配置,可以咨询DBA。
数据库参数设置
在数据库连接的面板中,选择“选项”,(上面两个是普通和高级),在参数列表中,根据情况添加以下参数:
defaultRowPrefetch = 200; (default = 10)
这个参数是修改每次从数据库取回的记录的行数,默认为10,修改为200后可以减少从数据库取值的次数。
(Oracle Only) readTimeout = 60;
这个参数是修改从数据库读数据时的超时时间,单位是秒,将这个值改大一点可以防止大量数据读取时的超时问题
(Mysql Only) useServerPrepStmts=false;
rewriteBatchedStatements=true ; useCompression=true ;
前两个参数会让数据库重排Insert语句,合并多条插入语句成为一条,提交插入效率。第三个参数表示在传输时开启数据压缩 ,提高传输效率。这些在使用table output的时候很有效,在配置充足且网络正常的情况下应该可以达到20k~80k的写入速度。