数据库面试题:Mysql如何进行死锁检测

Mysql如何进行死锁检测

mysql的InndoDB存储引擎使用wair-for graph(等待图)的方式来进行死锁检测。
wair-for graph要求数据库保存一下两种信息:

  • 锁的信息链表
  • 事务等待锁链表

之后根据上述链表可构造出一张图,若这个图中存在回路就代表存在死锁。

示例如下:

  • 在TWL(Transaction Wait Lists)中可以看到,一共有四个事务,所以在图中有四个节点。而事务t2 对row1占 x锁(排它锁),事务t1 对row2占s锁(共享锁)。
  • 事务t1 需要等待t2 中的row1资源,因此在wair-for graph图中有条边从t1指向t2.
  • 事务t2 需要等待t1 ,t4 所占用的row2 对象,故存在节点t2 到t1,t4的边
  • 同样存在t3 到 t1,t2,t4的边
  • 最终可以发现回路(t1,t2)

目前wair-for graph使用深度优先搜索的算法实现。

在这里插入图片描述

根据上述信息可构造如下图:
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值