mysql插入性能测试
一、环境vm虚拟机,centos7,MySQL5.7,jdk8两台机器是局域网二、测试代码数据表:16个分表,表结构是20个字段,15个字段的长度是100个字符填充。使用java直接连接数据库,用多线程测试,每个线程一个数据库连接,事务自动提交。每个线程完成批量插入后才关闭连接。mysql没有进行线程优化,都是使用默认配置。三、测试数据1、1核,单表,innoDB...
一、环境
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核的低很多,这个很难解释。
更多推荐
所有评论(0)