首页 存档 技术 查看内容

秒杀场景下开源MySQL压测及性能优化一二

2018-3-30 13:00 |来自: 互联网 303 0

摘要: 前言在2016年底发布了MySQL5.7的GA版本,但大部分公司线上用的还是5.6的版本。Facebook的MyRocks也是基于5.6进行开发,MyRocks未来会直接合并到8.0。我们今天的分享是基于MySQL5.6.19和Percona5.6.25来进行的。我们 ...

前言
在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
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部