由于工作需要,简单测试了一下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配置参数说明
- useCompression=true,压缩数据传输,优化客户端和MySQL服务器之间的通信性能。
- 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); - useServerPrepStmts=false 关闭服务器端编译,sql语句在客户端编译好再发送给服务器端,发送语句如上。
如果为true,sql会采用占位符方式发送到服务器端,在服务器端再组装sql语句。
占位符方式:INSERT INTO t (c1,c2) VALUES (?,?),(?,?),(?,?);
2、调优后性能
mysql数据库:导入速度在23000条/s
网友评论