让我们首先了解粒度的含义。
粒度:它是允许锁定的数据项的大小。
多重粒度:
- 可以定义为按层次将数据库分解为可以锁定的块。
- 多重粒度协议可增强并发性并减少锁定开销。
- 它保持对锁定内容和锁定方式的跟踪。
- 可以轻松决定锁定数据项还是解锁数据项。这种类型的层次结构可以图形化地表示为树。
- 第一级或更高级别显示整个数据库。
- 第二层代表类型区域的节点。更高级别的数据库正是由这些区域组成。
- 该区域由称为文件的子节点组成。没有文件可以存在于多个区域。
- 最后, 每个文件都包含称为记录的子节点。该文件完全具有作为其子节点的那些记录。没有记录代表一个以上的文件。
- 因此, 从顶层开始的树的层次如下:
- 数据库
- 区域
- 文件
- 记录
文章图片
在此示例中, 最高级别显示了整个数据库。下面的级别是文件, 记录和字段。
还有三种具有多种粒度的其他锁定模式:
意图模式锁定 意图共享(IS):它包含在树的较低级别的显式锁定, 但仅具有共享锁。
意图专用(IX):它包含排他或共享锁的较低级别的显式锁。
共享和意图专用(SIX):在此锁中, 节点通过共享事务锁定在共享模式下, 而某些节点被锁定在专有模式下。
具有意图锁定模式的兼容性列表:下表描述了这些锁定模式的兼容性列表:
文章图片
它使用意图锁定模式来确保可串行性。它要求如果事务尝试锁定一个节点, 那么该节点必须遵循以下协议:
- 事务T1应该遵循锁兼容性矩阵。
- 事务T1首先锁定树的根。它可以在任何模式下锁定它。
- 如果T1当前将节点的父级锁定在IX或IS模式下, 则事务T1仅将节点锁定在S或IS模式下。
- 如果T1当前已将节点的父级锁定在IX或SIX模式下, 则事务T1仅将节点锁定在X, SIX或IX模式下。
- 如果T1以前没有仅解锁任何节点, 那么事务T1可以锁定一个节点。
- 如果T1当前仅不具有该节点的所有子级, 则事务T1将解锁一个节点。
- 如果事务T1读取文件Fa中的记录Ra9, 则事务T1需要在IX模式下锁定数据库, 区域A1和文件Fa。最后, 它需要将Ra2锁定在S模式下。
- 如果事务T2修改了文件Fa中的记录Ra9, 则可以在将数据库, 区域A1和文件Fa锁定为IX模式后进行修改。最后, 它需要将Ra9锁定在X模式。
- 如果事务T3读取文件Fa中的所有记录, 则事务T3需要锁定数据库, 并以IS模式锁定区域A。最后, 需要将Fa锁定在S模式下。
- 如果事务T4读取了整个数据库, 则T4需要将数据库锁定为S模式。
推荐阅读
- DBMS映射约束
- DBMS基于日志的恢复
- DBMS基于锁的协议
- DBMS数据库语言
- DBMS键key详解
- DBMS join操作详解
- DBMS join依赖
- DBMS完整性约束
- DBMS推断规则(IR)