云数据库 MySQL 热点更新

热点更新功能是一项针对高并发场景的优化能力,主要用于解决像秒杀、限时抢购这类业务中,大量请求同时更新同一条数据库记录(称为“热点行”)时导致的性能瓶颈问题。

相关产品
云数据库 MySQL 产品页,含版本规格、价格与购买入口。

一、功能简介

当创建热点更新保护任务后,系统会自动探测是否有单行的热点更新,如果有,则会将这些存在热点行更新冲突的事务在逻辑上分为多个组(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;xxxUPDATE table_name SET a=? WHERE id/pk=?;yyyCOMMIT;

·唯一键热点更新使用方法是在 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 OFF ON/OFF 是否开启热点更新功能。ON:表示开启。OFF:表示关闭。
赞 (0)
上一篇 4天前
下一篇 4天前