业务是订单支付,同一会频繁更新同一条记录,开了悲观锁后,一到促销时段就大批量报 1205 Lock wait timeout,TiKV 的 Raftstore CPU 直接拉满,调大 wait_timeout 也没用,有没有办法从锁等待队列或 Raft 层面优化?
TiCDC 同步 + 开启 TiDB 外键,原生支持 CASCADE,无侵入、无代码改动。
调小悲观锁等待超时,快速失败释放锁;事务拆小、缩短持锁时间;业务捕获报错加随机退避重试
排队等一小会儿拿不到锁就快速报错释放,不会堆积海量请求压死 TiKV,单个报错变多,但不会整体崩
- 1205 超时本质:单行超高并发→悲观锁串行排队→队列堆积超时,调大 timeout 只会恶化;
- 悲观锁适合支付强一致,但单行极致并发下天然存在串行吞吐上限;
- 锁队列优化:优先开内存悲观锁 + 公平锁 + 短超时快速重试;根治靠业务分桶打散热点 Key;
- Raft 层面只能扩容线程、隔离节点减负,无法突破单行锁串行的理论 QPS 上限;
- 兜底业务策略:客户端实现指数退避重试、流量削峰排队,不要裸打数据库。
这个不能调大wait_timeout,调小试试
这个功能是支持的。建议先看下官方文档的对应章节,如果遇到具体问题可以贴出来,我帮你分析。
此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。