Kettle 加快数据入库速度

1. 在目标数据库连接选项中增加下列参数

useServerPrepStmts=false
rewriteBatchedStatements=true
useCompression=true
useSSL=false
  • useServerPrepStmts=false

        关闭服务器端编译,sql语句在客户端编译好再发送给服务器端。如果为true,sql会采用占位符方式发送。

  • rewriteBatchedStatements=true

        常用于数据库连接为mysql。要批量执行的话,JDBC连接URL字符串中需要新增一个参数:rewriteBatchedStatements=true,并保证5.1.13以上版本的驱动,才能实现高性能的批量插入。默认情况下会无视executeBatch()语句,把批量执行的一组sql语句拆散,一条一条地发给MySQL数据库,批量插入实际上是单条插入,直接造成较低的性能。只有把rewriteBatchedStatements参数置为true, 驱动才会帮你批量执行SQL。另外这个选项对INSERT/UPDATE/DELETE都有效。

  • useCompression=true

        压缩数据传输,优化客户端和MySQL服务器之间的通信性能。

2. 适当提高数据集大小

        选择转换设置,在杂项中进行设置 size_rowset(记录集合里的记录数)。

3. 调整提交记录数大小

        加大“表输出”步骤中的“提交记录数量”。

4. 调整JVM大小

        加大 .../data-integration/spoon.sh 文件中的 Xms、Xmx:

PENTAHO_DI_JAVA_OPTIONS="-Xms4096m -Xmx8192m -XX:MaxPermSize=256m"
  • -Xmx:设置JVM最大可用内存。
  • -Xms:设置JVM初始内存。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。

        必须注意:-Xmx必须小于等于系统内存的1/4,要不然会报错,-Xms不大于-Xmx。当系统内存为4G时-Xmx不能大于1G,当系统内存为8G时或更大时,java(JDK)版本必须是64位的才能识别出来,此时-Xmx可以为2G或更高。个人建议内存设置不要超付整个服务器内存的2/3。

5. 调整 MySQL 相关参数

bulk_insert_buffer_size=1073741824
innodb_buffer_pool_size=34359738368
innodb_flush_log_at_trx_commit=0
max_allowed_packet=1073741824
concurrent_insert=AUTO
innodb_autoinc_lock_mode=2

参考:

猜你喜欢

转载自blog.csdn.net/wzy0623/article/details/132316837
今日推荐