热点更新

最近更新时间:2025-09-15 16:00:21

我的收藏

功能介绍

热点更新功能是一项针对高并发场景的优化能力,主要用于解决像​​秒杀、限时抢购​​这类业务中,大量请求同时更新同一条数据库记录(称为“热点行”)时导致的性能瓶颈问题。
当创建热点更新保护任务后,系统会自动探测是否有单行的热点更新,如果有,则会将这些存在热点行更新冲突的事务在逻辑上分为多个组(group),同一个组内的事务之间除了更新热点行语句,还会并行执行其他语句,这样可以减少大量行锁造成的并发性能下降,提高高并发场景的数据库性能。支持通过 DBbrain 控制台 创建、查看、关闭和删除热点更新保护任务。
该功能的核心工作原理可以简单理解为如下流程:
1. 自动探测​​:系统会实时监控数据库的更新操作,自动识别出被高频率更新的特定数据行。
2. 请求排队​​:一旦识别出热点行,系统会将后续针对该行的并发更新请求放入等待队列​​。
3. 事务等待唤醒:逻辑分组之后,组内事务只会在执行热点更新语句时要求串行,执行其他语句时为并行。

支持版本

内核版本 MySQL 5.7 20250330 及以上支持基于主键和唯一键的热点更新优化。
内核版本 MySQL 8.0 20241001 及以上支持基于主键的热点更新优化。

适用场景

该功能主要用于应对​​秒杀、限时抢购​​等业务场景,解决因大量用户同时更新同一条数据(如库存)导致的数据库性能瓶颈问题。
在事务原本执行时间比较长、或者有长短事务混合的场景中,使用该功能可以提升执行性能。

功能优势

无需业务改造。
具备更广泛的 SQL 兼容性,能够支持一个事务中多个 SELECT FOR UPDATE、UPDATE 或 INSERT 的 SQL。
原本需要在前一个事务提交后才能开始更新热点行的事务,现在只需要在前一个事务更新完后就能执行,大大缩短了事务等待锁的时间。

性能数据

实例规格配置:MySQL 8.0 独享型 - 32核256000MB,存储空间200GB。
开启热点更新功能后,云数据库 MySQL 的 TPS 能够稳定在3万左右,可以满足实际的业务需求。


功能使用注意事项

适用的事务模式如下所示,其中,a 不能是索引键,否则会失去效果。
BEGIN;
xxx
UPDATE table_name SET a=? WHERE id/pk=?;
yyy
COMMIT;
唯一键热点更新使用方法是在 SQL 中加入 Hint:/*+ TXSQL_UK_HOT_UPDATE */,示例如下。
UPDATE /*+ TXSQL_UK_HOT_UPDATE */ table_name SET a=? WHERE uk=?;
使用热点更新功能时,参数 thread_handling 的取值请设置为 one-thread-per-connection。

功能使用限制

负载限制

一个事务中不允许对同一个热点记录做多次 UPDATE。
事务 UPDATE 热点完之后,后面的语句不能有冲突,虽然不构成热点,但是可能会出现 hang 住的现象。
同一个事务内不能更新多个热点。
热点更新负载期间不能删除热点行。

参数限制

暂不支持线程池模式。
需要开启 Binlog,并且参数 binlog_order_commits = ON。如果关闭 Binlog,参数 innodb_hot_update_detect 则无法打开;如果开启了参数 innodb_hot_update_detect,且负载中仍有热点,则此时无法关闭 Binlog。
要关闭参数 innodb_hot_update_detect,必须等待当前负载中热点更新结束。

SELECT FOR UPDATE 限制

SELECT FOR UPDATE 和 UPDATE 都基于主键索引单条更新且更新条件一致。
SELECT FOR UPDATE 必须在 UPDATE 之前。

唯一键限制

不支持 SELECT UK FOR UPDATE 之后 UPDATE UK 的事务模式。
不支持同一个事务内先使用主键,再使用唯一键更新热点行这种事务模式。如果事务1使用主键,事务2使用唯一键更新同一行,这种混合更新方式是支持的。

功能使用方法

云数据库 MySQL 提供如下两种方法来开启热点更新功能。

方法一:通过 DBbrain 控制台开启

详细操作步骤可参见 创建热点更新保护任务

方法二:通过参数开启

说明:
对于以下相关参数的使用,您需要 提交工单 申请。设置参数的操作方法您可参考 设置实例参数
通过设置参数 innodb_hot_update_detect 的值为 ON,来开启热点更新功能。

相关参数说明

参数名
动态
类型
默认
参数值范围
说明
innodb_hot_update_detect
yes
string
ON
ON/OFF
是否开启热点更新功能。
ON:表示开启。
OFF:表示关闭。