解释在具有多种粒度锁定的2PL中的调度以及树状结构下的调度(DBMS)
数据库的锁定和解锁应以避免不一致性、死锁和饥饿的方式进行。
2PL锁定协议
每个事务将分两个阶段锁定和解锁数据项。
**增长阶段** - 此阶段发出所有锁。所有对数据项的更改提交后,不会释放锁,然后第二阶段(收缩阶段)开始。
**收缩阶段** - 此阶段不发出锁,所有对数据项的更改都被记录(存储),然后释放锁。
考虑如下所示的树状结构数据库:
A -> B -> C
现在让我们了解一下**在具有多种粒度锁定的2PL下不可能的调度以及在树协议下可能的调度。**
事务Ti的第一个锁可以是图上的任何项目。
然后,如果X的父项目前被Ti锁定,则数据项X可以被事务Ti锁定。
之前锁定的数据项可以在任何时间解锁。
T1 | T2 |
---|---|
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下可能的调度以及在树协议下不可能的调度。**
- 它分两个阶段执行。
- 锁定在增长阶段完成。
- 解锁在收缩阶段完成。
- 锁定点是增长阶段结束的点。
T1 | T2 |
---|---|
lock(A) | |
lock(B) | |
lock(C) | |
Unlock(B) | |
Unlock(A) | |
Unlock(B) |
这里:
在事务T2中
- 增长阶段在步骤2。
- 收缩阶段在步骤4。
- 锁定点在2
广告