两阶段锁定协议

我们简要地讨论了这个问题 第一类并发控制协议 ,即基于锁的协议。

null

现在,回想一下我们上次讲到的地方,有两种锁可用 共享S(a) 独家X(a) .在没有任何限制的情况下实现这个锁系统,我们就可以使用简单的基于锁的协议(或 二进制锁 ),但它也有自己的缺点 不保证可序列化 。时间表可能遵循上述规则,但可能会导致不可序列化的时间表。

为了保证可串行化,我们必须遵循一些附加协议 关于锁定和解锁操作的定位 在每笔交易中。这就是两相锁定(2-PL)的概念,2-PL确保了可串行化。现在,让我们深入挖掘!

两相锁定–

如果锁定和解锁可以分两个阶段完成,则称交易遵循两阶段锁定协议。

  1. 成长阶段: 可以获取数据项的新锁,但不能释放任何锁。
  2. 收缩阶段: 可以释放现有锁,但无法获取新锁。

注—— 如果允许锁转换,则在生长阶段允许锁升级(从S(a)到X(a)),在收缩阶段必须进行锁降级(从X(a)到S(a))。

让我们来看一个实现2-PL的事务。

T 1. T 2.
1. 锁-S(A)
2. 锁-S(A)
3. 锁X(B)
4. ……. ……
5 解锁(A)
6. 锁X(C)
7. 解锁(B)
8. 解锁(A)
9 解锁(C)
10 ……. ……

这只是一个框架事务,展示了如何使用2-PL解锁和锁定。注意: 交易记录T 1. :

  • 生长阶段从步骤1-3开始。
  • 收缩阶段来自步骤5-7。
  • 锁定点在3

交易记录T 2. :

  • 生长阶段从步骤2-6开始。
  • 收缩阶段来自步骤8-9。
  • 6点锁定

嘿,等等! 是什么 锁定点? 增长阶段结束的点,即当事务获得继续其工作所需的最终锁时。现在看看时间表,你一定会明白的。

我已经说过2-PL确保了可序列化性,但2-PL仍有一些缺点。让我们看看缺点:

2-PL中的级联回滚– 让我们看看下面的时间表:

12122

花点时间分析一下日程安排。是的,你是对的,因为T中的脏读物 2. 和T 3. 分别在第8行和第12行中 1. 如果我们失败了,我们也必须击退其他人。因此 级联回滚在2-PL中是可能的。 我以骨架时间表为例,因为当它保持简单时很容易理解。当用多变量的实时事务问题来解释时,它变得非常复杂。

2-PL中的僵局- 考虑这个简单的例子,很容易理解。假设我们有两笔交易 1. 和T 2. .

Schedule:   Lock-X1(A)   Lock-X2(B)  Lock-X1(B)  Lock-X2(A)

绘制优先图,可以检测循环。所以在2-PL中死锁也是可能的。

两阶段锁定还可能会限制计划中发生的并发量,因为事务可能无法在使用项目后释放该项目。这可能是因为我们可能会在时间表上设置协议和其他限制,以确保可序列化性、死锁自由和其他因素。这是我们为确保可序列化性和其他因素而必须付出的代价,因此可以将其视为并发性和维护ACID属性之间的交易。

上述类型的2-PL被称为 基本2PL .总之,它确保了冲突序列化,但 没有 防止级联回滚和死锁。此外,我们将研究另外三种类型的2PL,严格2PL,保守2PL和严格2PL。

登机门相关问题:

  1. GATE CS 2016-2 |问题61
  2. 盖特CS 1999 |问题31
© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享