kettle导入mysql/postgresql的性能对比

由于工作需要,简单测试了一下mysql/postgresql的导入性能,均在无特殊优化的前提下进行的测试。

一、测试环境

本地笔记本电脑,配置如下:
cpu: i7-5500u
内存:12G
硬件:固态,平均写入速度大概在230M/s
笔记本电脑采用vbox安装centos7.3,内核版本3.10以上。
分配给centos虚拟机的内存为6G。
mysql/postgresql数据库均以docker方式安装在centos系统之上。
mysql数据库版本:5.6.50
postgresql数据库版本:12.5

二、测试过程

输入:使用kettle的文本文件输入组件
输出:采用kettle的表输出组件
字段:产品名称(varchar(200)),产品编号(varchar(200)),产品描述(varchar(2000))
总数据量:30万条。
每个数据库分别测试3次。

三、测试结果

mysql数据库:平均导入速度在240条/s
postgresql数据库:平均导入速度在13000条/s

四、mysql数据库调优

在kettle的mysql数据连接配置中增加如下参数:
useServerPrepStmts=false
rewriteBatchedStatements=true
useCompression=true

1、mysql配置参数说明

  1. useCompression=true,压缩数据传输,优化客户端和MySQL服务器之间的通信性能。
  2. rewriteBatchedStatements=true ,开启批量写功能
    将会使大批量单条插入语句:
    INSERT INTO t (c1,c2) VALUES ('One',1);
    INSERT INTO t (c1,c2) VALUES ('Two',2);
    INSERT INTO t (c1,c2) VALUES ('Three',3);
    改写成真正的批量插入语句:
    INSERT INTO t (c1,c2) VALUES ('One',1),('Two',2),('Three',3);
  3. useServerPrepStmts=false 关闭服务器端编译,sql语句在客户端编译好再发送给服务器端,发送语句如上。
    如果为true,sql会采用占位符方式发送到服务器端,在服务器端再组装sql语句。
    占位符方式:INSERT INTO t (c1,c2) VALUES (?,?),(?,?),(?,?);

2、调优后性能

mysql数据库:导入速度在23000条/s

注:参数说明参考https://www.cnblogs.com/cl1234/p/9627833.html

你可能感兴趣的:(kettle导入mysql/postgresql的性能对比)