前言 在2016年底发布了MySQL5.7的GA版本,但大部分公司线上用的还是5.6的版本。Facebook的MyRocks也是基于5.6进行开发,MyRocks未来会直接合并到8.0。 我们今天的分享是基于MySQL5.6.19和Percona5.6.25来进行的。我们对这两个版本,进行了MySQL源码的修改,从Facebook5.6开源版本里面抽取了关闭死锁检测的补丁,合并到了MySQL5.6.19和Percona5.6.25,并进行了性能压测。
OK,我们切入今天的主题,MySQL的热点更新场景,对应到业务场景是秒杀系统,热点商品减库存。
在性能压测计划中,主要进行了四个版本的对比: 1、MySQL5.6.19 原生版本 2、MySQL5.6.19 增加死锁检测关闭 (5.6.1.9 no deadlock check ndlc) 3、Percona5.6.25 原生版本 (percona tp) 4、Percona5.6.25增加死锁检测关闭 (percona tp nldc) 对着四个版本进行了8、16、32、64、128、512、1024、2048、4096个并发线程的压测。
压测准备 压测工具 sysbench0.5。 事务隔离级别均为READ-COMMITTED,CPU 32cores,BP15G。数据放在SSD,日志放在SAS盘。 表结构和数据准备:由于秒杀和减库存重要的瓶颈之一是在update语句的效率,我们为了简单理解起见,用一个最核心的update语句来做事务。
#创建测试表
CREATE TABLE `test_update` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`stock` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
insert into item.test_update (id,stock) value(1,500000);
#更新语句
update test_update set stock =stock -1 where id = 1 and stock
|