一、环境

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

两台机器是局域网

二、测试代码

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

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

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

三、测试数据

1、1核,单表,innoDB

每个线程插入条数单线程耗时线程数总tps
10万63s1个1500条
10万78s2个2564条
10万127s4个3149条
10万224s8个3571条
10万340s12个3529条

 

 

 

 

 

2、4核,单表,innoDB

每个线程插入条数单线程耗时线程数总tps
10万60s1个1666条
10万64s2个3200条
10万97s4个4123条
10万195s8个4100条
10万325s12个3600条

 

 

 

 

 

3、1核,16个表,MyISAM

每个线程插入条数单线程耗时线程数总tps
2万10s1个2000条
50002s2个5000条
5千2s4个10000条
5千5s8个8000条
5千10s16个8000条

 

 

 

 

 

4、2核,16个表,MyISAM

每个线程插入条数单线程耗时线程数总tps
2万7s1个3000条
50002s2个5000条
5千2s4个10000条
5千5s8个8000条
5千12s16个6666条

 

 

 

 

 

5、4核,16个表,MyISAM

每个线程插入条数单线程耗时线程数总tps
2万11s1个1176条
50003s2个3300条
5千5s4个4000条
5千11s8个3636条
5千15s16个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

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

更多推荐