【数据库】二阶段锁

Two-phase locking (2PL) is a concurrency controlprotocol that determines whether a txn can access an object in the database on the fly.

The protocol does not need to know all the queriesthat a txn will execute ahead of time.

分为两个阶段:
一阶段:只能加锁:Growing

二阶段:只能解锁:Shrinking
在这里插入图片描述
二阶段锁可以保证冲突可串行化。

1. 但是存在级联回滚的问题。
在这里插入图片描述
T2在T1的临时版本上做了操作,所以导致回滚。所以可以在最后commit 之前再解锁:
Strong Strict 2PL
在这里插入图片描述
只有在commit之前才一次性全部解锁。 不会产生级联回滚。其实也就是解决了脏读的问题,级联回滚的的原因就是产生了脏读。
在这里插入图片描述
2. 二阶段锁可能出现死锁的问题。
两种方法:
死锁检测:
构建了一个锁的等待图,节点是事务,边是等待锁。如果存在环路,那么就存在死锁。
victim selection 牺牲者选择方法:
通过其运行时间;运行语句数量;有多少锁被锁;必须要回滚的语句次数;已经回滚的次数;

同时,也不需要全部回滚。

死锁预防:
给每个事务一个优先级,老的事务优先级比较高;
wait-die;
老的等年轻的释放锁,年轻的如果要获取老的锁,就直接终止;
wound-wait:
老的直接获取新的锁,直接抢夺;新的需要等老的锁。

如果新的被中止后,它的时间戳是一开始执行的时间。

锁的粒度也需要权衡
粒度越小,并行越好,但是加锁的消耗就更大了。这里就需要一个权衡。

Intention Locks
意向标记,如果行被锁了,那么表就会有一个意向标记,这样其他事务在给表加锁的时候,就不需要逐个遍历行是否有锁了。
An intention lock allows a higher-level node tobe locked in shared or exclusive mode without having to check all descendent nodes.
在这里插入图片描述
所以构建了一个新的矩阵:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值