一、环境

vm虚拟机,centos7,MySQL5.7,jdk8

两台机器是局域网

二、测试代码

数据表:16个分表,表结构是20个字段,15个字段的长度是100个字符填充。

使用java直接连接数据库,用多线程测试,每个线程一个数据库连接,事务自动提交。每个线程完成批量插入后才关闭连接。

mysql没有进行线程优化,都是使用默认配置。

三、测试数据

1、1核,单表,innoDB

每个线程插入条数 单线程耗时 线程数 总tps
10万 63s 1个 1500条
10万 78s 2个 2564条
10万 127s 4个 3149条
10万 224s 8个 3571条
10万 340s 12个 3529条

 

 

 

 

 

2、4核,单表,innoDB

每个线程插入条数 单线程耗时 线程数 总tps
10万 60s 1个 1666条
10万 64s 2个 3200条
10万 97s 4个 4123条
10万 195s 8个 4100条
10万 325s 12个 3600条

 

 

 

 

 

3、1核,16个表,MyISAM

每个线程插入条数 单线程耗时 线程数 总tps
2万 10s 1个 2000条
5000 2s 2个 5000条
5千 2s 4个 10000条
5千 5s 8个 8000条
5千 10s 16个 8000条

 

 

 

 

 

4、2核,16个表,MyISAM

每个线程插入条数 单线程耗时 线程数 总tps
2万 7s 1个 3000条
5000 2s 2个 5000条
5千 2s 4个 10000条
5千 5s 8个 8000条
5千 12s 16个 6666条

 

 

 

 

 

5、4核,16个表,MyISAM

每个线程插入条数 单线程耗时 线程数 总tps
2万 11s 1个 1176条
5000 3s 2个 3300条
5千 5s 4个 4000条
5千 11s 8个 3636条
5千 15s 16个 5333条

 

 

 

 

 

四、测试结论

1、在某些条件下MyISAM的插入效率比innoDB快。

2、连接数是服务器核数的两倍时,可获得最佳的插入性能。

3、多连接数时,InnoDB实例的tps是:2500-4100,MyISAM实例的tps是:3300-1万

4、Sysbench基准测试,10个线程,10个表,每个表插入10万条数据,结果如下:

五、理论

1、当服务器核数,数据库连接数,数据库内部线程数一样的情况下,多核应该是单核的倍数,但是测试时没有证明这点,可能是mysql线程配置不是最优的。

2、MyISAM时,4核的tps居然比2核的低很多,这个很难解释。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐