We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
秒杀场景是电商行业经常遇到的场景,比如针对某款热门限量产品的抢购,对应到关系型数据库的模型就是,一款产品对应二维表中的一条记录,抢购对应着这个记录的库存值的update更新。
因为要维护事务特性,抢购对应的update语句在事务级别没有并行性可言,必须串行完成,所以,当有大并发请求到达时,在InnoDB引擎层(假设使用InnoDB),需要排队维护事务级阻塞关系, 伴随着死锁检测的开销越来越大,主机计算资源严重消耗,吞吐量随着并发请求越来越大而急剧下跌,响应延时增大,形成雪崩效应,最终导致业务中断。
AliSQL在针对秒杀场景有多套解决方法,可以组合使用。无一例外,都是基于排队论的思想,期望在大并发的时候,保证数据库 持续稳定,维持高吞吐能力,进而保护应用链条, 这里简单介绍三种方法:
下面针对Server层的排队,进行测试
主机配置: CPU: Intel(R) Xeon(R) CPU E5-2682 v4 @ 2.50GHz OS kernel: Linux 2.6.32 Memory: 512 G Disk: SSD
AliSQL采用RDS配置的8C-16G的规格进行测试,具体参数参考AliSQL-8C-16G.cnf
打开Server层排队的开关:set global rds_ic_reduce_hint_enable=ON
测试采用sysbench标准测试,测试场景为alisql_ic.lua update COMMIT_ON_SUCCESS ROLLBACK_ON_FAIL QUEUE_ON_PK 1 TARGET_AFFECT_ROW 1 t1 set c=c+1 where id=1;
Sysbench主要参数:
--max-requests=0 --max-time=900 --oltp_tables_count=1 or 8 --oltp_table_size=1 --report-interval=10 --num-threads=$count --oltp_inventory_mysql_type=alisql // needed for AliSQL
本次测试共对比了两个版本, AliSQL 5.6.32,Oracle 5.6.32。
测试数据如下:
单条记录更新
八条记录更新
从上面的压力测试情况,在秒杀的场景下,AliSQL可以保持持续稳定的吞吐能力。
There was an error while loading. Please reload this page.