多粒度2025年3月17日 | 阅读 3 分钟 让我们从理解粒度的含义开始。 粒度: 它是允许锁定的数据项的大小。 多粒度- 它可以定义为将数据库分层划分为可锁定的块。
- 多粒度协议增强了并发性并降低了锁开销。
- 它跟踪要锁定什么以及如何锁定。
- 它使决定是锁定数据项还是解锁数据项变得容易。这种层次结构可以图形化地表示为一棵树。
例如: 考虑一棵有四层节点的树。 - 第一层或更高层显示整个数据库。
- 第二层表示类型为“区域”的节点。更高层的数据库由这些区域组成。
- 区域包含称为“文件”的子节点。任何文件都不能存在于多个区域中。
- 最后,每个文件包含称为“记录”的子节点。文件只包含其子节点所代表的记录。任何记录都不能在多个文件中。
- 因此,从顶层开始的树的层次结构如下:
- 数据库
- 面积
- 文件
- 记录

在此示例中,最高层显示整个数据库。下面的层是文件、记录和字段。 多粒度有三种额外的锁模式 意向锁模式意向共享 (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。最后,它需要以 S 模式锁定 Ra2。
- 如果事务 T2 修改文件 Fa 中的记录 Ra9,则它可以在以 IX 模式锁定数据库、区域 A1 和文件 Fa 后执行此操作。最后,它需要以 X 模式锁定 Ra9。
- 如果事务 T3 读取文件 Fa 中的所有记录,则事务 T3 需要以 IS 模式锁定数据库和区域 A。最后,它需要以 S 模式锁定 Fa。
- 如果事务 T4 读取整个数据库,则 T4 需要以 S 模式锁定数据库。
|