数据库更新为什么会卡住:行锁、范围锁与死锁后端随身听

数据库更新为什么会卡住:行锁、范围锁与死锁

12分钟 ·
播放数4
·
评论数0

一条只更新一行订单的语句,为什么会等待几十秒?问题通常不在语句执行得慢,而在它需要的锁被另一个尚未结束的事务占着。

这一集从真实的订单更新超时出发,讲清 InnoDB 实际锁住的是索引记录和索引范围,索引缺失为什么会扩大加锁范围,以及锁等待与死锁应当如何定位和处理。

重点内容:

- 更新语句为什么需要排他锁

- 行锁为什么本质上锁在索引记录上

- 缺少索引如何扩大扫描和加锁范围

- 记录锁、间隙锁与临键锁分别保护什么

- 锁等待和死锁有什么区别

- 为什么死锁事务必须允许重试

- 如何定位阻塞者,而不是只处理等待者

英文词对照:

- Record Lock:记录锁

- Gap Lock:间隙锁

- Next-Key Lock:临键锁

- Exclusive Lock:排他锁

- Lock Wait:锁等待

- Deadlock:死锁

- Blocking Transaction:阻塞事务

- Lock Wait Timeout:锁等待超时