热点行问题本质是多事务争抢同一行锁导致性能下降,解决核心是打散写压力:分桶拆分、应用层预分流、乐观锁+版本控制、写入分离与专用通道。
热点行问题本质是多个事务争抢同一行数据的锁,导致吞吐骤降、响应延迟甚至超时。解决核心不是“避开它”,而是把集中压力打散——让写操作从单点变成多点。
这是最直接有效的手段。不修改业务语义,只改变存储结构:
CREATE TABLE products (id INT PRIMARY KEY, stock INT);
CREATE TABLE product_stock (product_id INT, bucket_id TINYINT, stock INT, PRIMARY KEY(product_id, bucket_id));
bucket_id 0–9),扣减时随机或轮询选一个桶执行 UPDATE ... SET stock = stock - 1 WHERE product_id = ? AND bucket_id = ?
SUM(stock) 聚合,写压力自然分散为原来的约1/10避免所有请求都涌向DB,用轻量级组件提前拦截和调度:
DECRBY 做原子校验,快速拒绝超卖适合更新频次高但冲突概率不极端的场景:
version 字段,每次更新带上 WHERE version = ?
version 自增;失败说明被其他事务抢先修改,可重试或降级提示
成“检查+重试”,大幅缩短事务持有资源的时间对极敏感的热点数据,可考虑架构层面隔离: