Skip to content

Latest commit

 

History

History
52 lines (36 loc) · 1.2 KB

6.dead-lock.md

File metadata and controls

52 lines (36 loc) · 1.2 KB

死锁

死锁原因

  • 多个事务并发执行时因争夺资源而造成互相等待
  • 相反顺序加锁
  • 外键和触发器等隐式给子表加锁
  • S 锁和 X 锁冲突
  • 已经获取 gap 锁后,尝试获取插入意向锁造成等待

锁类型

S 锁

  • 可串行化中,查询自动加 S 锁
  • 可重复读中,查询可以手动加 S 锁

X 锁

  • 查询中,使用 for update 加 X 锁
  • 删除或更新自动加 X 锁

gap 锁

  • 可重复读中,范围操作或未命中加 gap 锁,避免幻读

auto-inc 锁

  • 插入时的特殊锁,插入后马上释放

插入意向锁

  • 插入意图锁是一种间隙锁,在执行插入之前设置
  • 插入意向锁只会和间隙锁或者 Next-key 锁冲突

解决死锁

  • 修改 SQL,调整加锁顺序
  • 降低隔离级别
  • 添加合理的索引,不走索引会全表加锁
  • 避免大事务
  • 避免同一个时间点执行多个操作同一表的事务