数据库死锁及解决方案

1. 什么是数据库死锁?

  • 两个或两个以上事务在事务执行过程中,因为抢占资源而导致互相等待的现象。

2.如何解决死锁?

  • 数据库通常使用超时机制解决死锁。某一个事务超时后立刻回滚,其他事务就能继续进行了。
  • 回滚会带来大量的性能损耗,采用等待图来进行死锁检测
  • 等待图中存在回路表示发生死锁。InnoDB采用深度优先检测死锁存在
  • 发现死锁就在undo log中找回滚数据量最小的事务进行回滚

3.等待图

等待图主要有俩信息链:锁的信息链事务等待链

  • 图中有4个事务:t1~t4,
  • row1行中锁的信息链表示:t2上了x锁,t1上了s锁。
  • 得到的等待图如下图,结点代表事务,有向边表示等待资源
  • 存在回路时,则代表着事务互相等待,此时就意味着存在死锁

 

posted @ 2022-08-11 14:29  做个读书人  阅读(849)  评论(0编辑  收藏  举报