You need to enable JavaScript to run this app.
文档中心
云数据库 MySQL 版

云数据库 MySQL 版

复制全文
下载 pdf
性能
热点高并发更新
复制全文
下载 pdf
热点高并发更新
本文介绍云数据库 MySQL 版提供的热点高并发更新功能的相关信息。​
背景信息​
秒杀场景是实际业务中常见的一种业务场景,对于数据库而言,这个场景的特点就是大量并发针对同一行数据进行更新。热点数据更新的核心问题在于行锁的冲突,为了解决这个问题,云数据库 MySQL 版采用了相同热点行的更新批量执行的方式。对于带有热点更新标识的 SQL 进入数据库后,数据库会对更新相同数据的 SQL 进行合并处理,从而提升热点高并发更新的性能。​
支持版本​
  • MySQL 5.7 版本,内核小版本为 MySQL 5.7.32_20241215 及以上。​
  • MySQL 8.0 版本,内核小版本为 MySQL 8.0.32_20230615 及以上。​
  • MySQL 8.4 版本,内核小版本为 MySQL 8.4.7_20260415 及以上。​
说明​
您可通过查看实例信息查看实例的内核小版本。如您实例的内核小版本未在受支持的内核小版本范围内,您可手动升级实例内核小版本。​
使用限制​
  • 只支持单表更新操作。​
  • 不支持表结构上带有触发器。​
  • 不支持分区表。​
  • 不支持带有 OFFSET/LIMIT/ORDER BY 的 UPDATE 语句。​
  • 查询必须带有WHERE条件,且为等值索引条件。​
  • 在事务块中使用秒杀,秒杀语句必须是事务块中最后一条 SQL 。​
  • UPDATE 列中不能包含主键和当前使用的索引列,除非 where 条件完全命中索引。​
  • 云数据库 MySQL 版的 8.0.26 版本序列的实例暂不支持该功能。​
使用说明​
  • 用户使用 SQL HINT 的方式指定秒杀更新操作,HINT 关键字为 LOGIC_UPDATE:​
  • ​
    update /*+ LOGIC_UPDATE */ t_stock set num = num - 1 where id = X and num > 0;​
    ​
  • 上述的批量执行设计只能支持非事务块的热点更新操作。如果需要在事务中使用秒杀,需要增加 HINT 关键字 AUTO_LOGIC_COMMIT_ROLLBACK,而且需要把热点更新的 SQL 作为事务的最后一条 SQL。带了这个 HINT 以后,数据库会根据 UPDATE 是否成功来主动提交或者回滚事务。​
  • ​
    begin; ​
    insert into t_order(userid, stockid, num) values(X, X, X); ​
    update /*+ LOGIC_UPDATE AUTO_LOGIC_COMMIT_ROLLBACK */ t_stock set num = num - 1 where id = X and num > 0;​
    ​
性能测试​
测试环境为 MySQL 5.7 版本,48 C 502 GiB 实例。​
​
CREATE TABLE sbtest(id INT UNSIGNED NOT NULL AUTO_INCREMENT, c BIGINT UNSIGNED NOT NULL, PRIMARY KEY (id));​
​
UPDATE /*+ LOGIC_UPDATE */ sbtest SET c=c-1 WHERE id = 1;​
​
测试结果如下。可以看出在没有使用热点更新优化时,QPS 会随着并发增大而急剧下降;而打开优化后,QPS 可以保持稳定。​
​
​
​
16​
32​
64​
128​
256​
512​
1024​
2048​
4096​
关闭秒杀​
QPS​
8309.06​
7708.74​
6408.44​
4006.42​
1786.19​
606.19​
247.76​
243.04​
245.75​
​
pct99/ms​
2.78ms​
5.03ms​
11.61ms​
36.68ms​
147.62ms​
863.30ms​
6464.70ms​
10195.54ms​
18021.98ms​
打开秒杀​
QPS​
13002.15​
25056.90​
39866.60​
64778.30​
94073.50​
85589.48​
79741.77​
76620.24​
75845.25​
​
pct99/ms​
1.30ms​
1.37ms​
2.67ms​
3.03ms​
4.81ms​
11.03ms​
23.26ms​
42.14ms​
74.00ms​
​
​
最近更新时间:2026.08.27 11:24:30
这个页面对您有帮助吗?
有用
有用
无用
无用