多粒度

2025年3月17日 | 阅读 3 分钟

让我们从理解粒度的含义开始。

粒度: 它是允许锁定的数据项的大小。

多粒度

  • 它可以定义为将数据库分层划分为可锁定的块。
  • 多粒度协议增强了并发性并降低了锁开销。
  • 它跟踪要锁定什么以及如何锁定。
  • 它使决定是锁定数据项还是解锁数据项变得容易。这种层次结构可以图形化地表示为一棵树。

例如: 考虑一棵有四层节点的树。

  • 第一层或更高层显示整个数据库。
  • 第二层表示类型为“区域”的节点。更高层的数据库由这些区域组成。
  • 区域包含称为“文件”的子节点。任何文件都不能存在于多个区域中。
  • 最后,每个文件包含称为“记录”的子节点。文件只包含其子节点所代表的记录。任何记录都不能在多个文件中。
  • 因此,从顶层开始的树的层次结构如下:
    1. 数据库
    2. 面积
    3. 文件
    4. 记录

DBMS Multiple Granularity

在此示例中,最高层显示整个数据库。下面的层是文件、记录和字段。

多粒度有三种额外的锁模式

意向锁模式

意向共享 (IS): 它在树的较低层包含显式锁定,但仅使用共享锁。

意向排他 (IX): 它在较低层包含显式锁定,使用排他锁或共享锁。

共享和意向排他 (SIX): 在此锁中,节点以共享模式锁定,并且同一事务以排他模式锁定某些节点。

与意向锁模式的兼容矩阵: 下表描述了这些锁模式的兼容矩阵


DBMS Multiple Granularity

它使用意向锁模式来确保可串行化。它要求如果事务尝试锁定一个节点,那么该节点必须遵循这些协议:

  • 事务 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。最后,它需要以 S 模式锁定 Ra2
  • 如果事务 T2 修改文件 Fa 中的记录 Ra9,则它可以在以 IX 模式锁定数据库、区域 A1 和文件 Fa 后执行此操作。最后,它需要以 X 模式锁定 Ra9
  • 如果事务 T3 读取文件 Fa 中的所有记录,则事务 T3 需要以 IS 模式锁定数据库和区域 A。最后,它需要以 S 模式锁定 Fa
  • 如果事务 T4 读取整个数据库,则 T4 需要以 S 模式锁定数据库。