解释 2PL 中多粒度锁定的调度以及树下调度(DBMS)

dbmsdatabasebig data analytics更新于 2026/1/13 0:52:17

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

2PL 锁定协议

每个事务都会在两个不同的阶段锁定和解锁数据项。

  • 增长阶段 − 所有锁都在此阶段发出。所有数据项更改提交后,不会释放任何锁,然后开始第二阶段(收缩阶段)。

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

考虑如下树形结构数据库 −

A -> B -> C

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

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

  • 然后,假设X的父级当前已被Ti锁定,则事务Ti可以锁定数据项X。

  • 之前锁定的数据项可以随时解锁。

T1T2
锁定(A)
锁定(B)
解锁(A)

锁定(A)
锁定(C)< br>
解锁(B)

锁定(B)

解锁(A)

解锁(B)
解锁(C)

这里,

在事务 T1

  • 增长阶段包含步骤 1-3。
  • 收缩阶段包含步骤 5-6。
  • 锁定点位于步骤 3。

现在,让我们了解在具有多粒度锁定的 2PL 下可以实现的调度,以及在树协议下无法实现的调度。

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

锁定(B)
锁定(C)

解锁(B)
解锁(A)
解锁(B)

此处,

在事务 T2

中
  • 增长阶段处于步骤 2。
  • 收缩阶段处于步骤4.
  • 锁定点为 2

相关文章