解释在具有多种粒度锁定的2PL中的调度以及树状结构下的调度(DBMS)


数据库的锁定和解锁应以避免不一致性、死锁和饥饿的方式进行。

2PL锁定协议

每个事务将分两个阶段锁定和解锁数据项。

  • **增长阶段** - 此阶段发出所有锁。所有对数据项的更改提交后,不会释放锁,然后第二阶段(收缩阶段)开始。

  • **收缩阶段** - 此阶段不发出锁,所有对数据项的更改都被记录(存储),然后释放锁。

考虑如下所示的树状结构数据库:

A -> B -> C

现在让我们了解一下**在具有多种粒度锁定的2PL下不可能的调度以及在树协议下可能的调度。**

  • 事务Ti的第一个锁可以是图上的任何项目。

  • 然后,如果X的父项目前被Ti锁定,则数据项X可以被事务Ti锁定。

  • 之前锁定的数据项可以在任何时间解锁。

T1T2
lock(A)
lock(B)
Unlock(A)

lock(A)
lock(C)
Unlock(B)

lock(B)

Unlock(A)

Unlock(B)
Unlock(C)

这里:

在事务T1

  • 增长阶段是从步骤1-3。
  • 收缩阶段是从步骤5-6。
  • 锁定点在3。

现在,让我们了解一下**在具有多种粒度锁定的2PL下可能的调度以及在树协议下不可能的调度。**

  • 它分两个阶段执行。
  • 锁定在增长阶段完成。
  • 解锁在收缩阶段完成。
  • 锁定点是增长阶段结束的点。
T1T2
lock(A)

lock(B)
lock(C)

Unlock(B)
Unlock(A)
Unlock(B)

这里:

在事务T2

  • 增长阶段在步骤2。
  • 收缩阶段在步骤4。
  • 锁定点在2

更新于:2021年7月6日

398 次查看

启动您的职业生涯

完成课程获得认证

开始
广告