mysql 死锁检测机制初探
死锁说明
原理简介
锁情况,圆圈代表事务,方框代表资源,实线代表拥有,虚线代表锁等待,红线
代表准备上锁
从上图看,A->2->B->1->A,形成死锁环路。同样,由于存在事务的锁等待,
A->2->C->1->,在 B 释放资源 2 后回造成新的锁等待。
代码说明
查找并解决死锁的伪代码如下
do
{
deadlock_search(); //查找死锁,如果发现死锁返回需牺牲的事务 id,否则 0
if (同一资源上锁等待超过 200)
{
归为死锁情况,回滚当前事务
}
else if (发现死锁 而且 被牺牲的事务为当前 lock 的拥有者)
{
回滚被牺牲事务
}
} while (需要继续检测死锁);
需要继续检测死锁:如果找到死锁,且死锁中被牺牲的事务不是当前事务
评论0