欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

MySQL插入性能测试_MySQL

程序员文章站 2022-05-17 18:25:58
...

测试目的

对比myisam和innodb的性能差异,批量插入的效果。

测试过程

环境

sync_binlog=0

innodb_flush_method=O_DIRECT

innodb_flush_log_at_trx_commit=2

单次插入总数:10w条

表结构

注:ip varchar(255)来源于业务,这里暂不做修改。

CREATE TABLE `wm_buz_consume_time_log` (
`id` int(10) NOT NULL AUTO_INCREMENT COMMENT ‘主键’,
`wm_poi_id` int(11) NOT NULL COMMENT,
`app_type` tinyint(2) DEFAULT ’0′ ,
`url` varchar(1024) DEFAULT NULL COMMENT ‘访问url’,
`consume_time` int(11) DEFAULT ’0′ COMMENT ‘响应时间’,
`ip` varchar(255) DEFAULT NULL,
`ctime` int(11) DEFAULT NULL COMMENT ‘创建时间’,
PRIMARY KEY (`id`)
)

单条INSERT

innodb myisam
单线程 3688 4600
4线程 3400 4600
16线程 3200 4600

批量Insert

engine record/insert insert/second record/second
MyISAM 10 3554.22762529 35542.3
50 1982.53113005 99126.6
100 1117.44688596 111745
200 599.321012222 119864
300 399.327219915 119798
400 298.744724058 119498
500 246.173864279 123087
Inoodb 10 1987.27785192 19872.8
50 790.588036815 39529.4
100 510.040947166 51004.1
200 324.766895247 64953.4
300 203.101339928 60930.4
400 174.502397867 69801
500 142.428435136 71214.2

测试结论

MyISAM因为表级锁,不受到线程数的影响;MyISAM显著的比INNODB快(INNODB存在锁、事务的开销),单线程高27%,随着线程数的增大,优势会更加明显。

MyISAM批量插入性能改善的十分明显,在单次批量到达100之后,插入速度基本上稳定下来,可以达到10w record/s,是单条插入的24倍

Innodb批量插入性能改善的十分明显,并且随着批量次数的不断增大,性能再持续增加,批量100,可以打到5w record/s,是单条插入的14倍,但是只有MyISAM的50%

MyISAM虽然插入性能比INNODB快很多,但是依旧建议采用INNODB+批量写入的方式,因为MyISAM存在表crash的问题(表很大的时候,索引较多的时候,recovery需要很长时间,并且recovery的过程中不可读写);另外不建议批量太多,存在超出max_allowed_packet的风险,会导致数据库在很多环节不太平滑。