OneSQL :: 平民软件定制的MySQL版本更加适合库存秒杀场景,SSD并非关键!

阿里的定制MySQL版本开源了,并且公布了一组在SSD ECS上的测试数据,平民软件定制的OneSQL也是基于阿里的业务经验定制的,只是我们没有SSD的机器,只能在SATA盘上测试了。测试的机器为R 710,CPU为8核Intel(R) Xeon(R) E5620  @ 2.40GHz,算是一款很老的机型了,硬件只有一块SATA本地盘,开启binlog。测试场景为单行记录减一的操作,表结构如下所示:

create table t_binlog (id int not null, col2 int);
insert into t_binlog values (1, 1000000000);
insert into t_binlog values (2, 1000000000);
insert into t_binlog values (3, 1000000000);
insert into t_binlog values (4, 1000000000);
insert into t_binlog values (5, 1000000000);

测试的语句非常简单,如下所示:

update t_binlog set col2 = col2 - 1 where id = 1;

分三个场景测试,如下所示:

  • 事务外,即自动提交模式下执行更新操作。
  • 事务中,将更新语放放到start transaction和commit中间。
  • 秒杀补丁,将更新语句放到事务中,但在SQL语句中加自动提交选。

对应的SQL分别为:

-- case 1
update t_binlog set col2 = col2 - 1 where id = 1;
-- case 2
start transaction;
update t_binlog set col2 = col2 - 1 where id = 1;
commit;
-- case 3
start transaction;
update /*+ [auto_commit auto_rollback affect_rows 1] */ 
    t_binlog set col2 = col2 - 1 where id = 1;
commit;

直接看测试结果吧,如下图所示:

onesql_inventory_patch

在256个并发之前,明显低于AliSQL在SSD上的测试值,SSD到底还是比单块SATA盘快多了。但到256个并发后,事务处理量比跑在SSD上的AliSQL还要高,对于这一点我也有些意外,可能是得益于OneSQL多个补丁的共同作用吧。同样地再来看一下随机更新8条记录的压测结果吧,如下图所示:

onesql_inventory_patch_8items

平民软件在设计OneSQL补丁时,不仅考虑到了库存场景,还结合了以前一套叫产品账的业务计数系统,对于应用层有更多的考虑,将MySQL的Server层作为应用层来设计,融入了不少的应用层经验。