📜  DBMS多重粒度

📅  最后修改于: 2020-12-12 07:49:36             🧑  作者: Mango

多重粒度

让我们首先了解粒度的含义。

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

多重粒度:

  • 可以定义为按层次结构将数据库分解为可以锁定的块。
  • 多重粒度协议增强了并发性并减少了锁定开销。
  • 它保持对锁定内容和锁定方式的跟踪。
  • 可以轻松决定锁定数据项还是解锁数据项。这种层次结构可以图形化地表示为树。

例如:考虑一棵具有四个节点级别的树。

  • 第一级或更高级别显示整个数据库。
  • 第二层代表类型区域的节点。更高级别的数据库正是由这些区域组成。
  • 该区域由称为文件的子节点组成。没有文件可以出现在多个区域中。
  • 最后,每个文件都包含称为记录的子节点。该文件完全具有作为其子节点的那些记录。没有记录代表一个以上的文件。
  • 因此,从顶层开始的树的层次如下:
    1. 数据库
    2. 文件
    3. 记录

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

还有三种具有多种粒度的附加锁定模式:

意图模式锁定

意图共享(IS):它包含在树的较低级别的显式锁定,但仅具有共享锁。

意图专用(IX):它包含排他或共享锁的较低级别的显式锁。

共享和意图专用(SIX):在此锁中,节点通过共享事务锁定在共享模式下,而某些节点被锁定在专有模式下。

具有意图锁定模式的兼容性列表:下表描述了这些锁定模式的兼容性列表:

它使用意图锁定模式来确保可串行性。它要求如果事务尝试锁定节点,则该节点必须遵循以下协议:

  • 事务T1应该遵循锁兼容性矩阵。
  • 事务T1首先锁定树的根。它可以在任何模式下锁定它。
  • 如果T1当前已将节点的父级锁定在IX或IS模式下,则事务T1仅将节点锁定在S或IS模式下。
  • 如果T1当前已将节点的父级锁定在IX或SIX模式下,则事务T1仅将节点锁定在X,SIX或IX模式下。
  • 如果T1之前没有仅解锁任何节点,则事务T1可以锁定一个节点。
  • 如果T1当前仅不具有该节点的所有子级,则事务T1将解锁一个节点。

请注意,在多个粒度下,锁是按自上而下的顺序获取的,并且必须按自下而上的顺序释放锁。

  • 如果事务T1在文件F一个读取记录R a9中,然后事务T1需要锁定数据库,面积A 1和文件F在一个IX模式。最后,它需要将R a2锁定为S模式。
  • 如果事务T2修改了文件F a中的记录R a9 ,则它可以在将数据库,区域A 1和文件F a锁定为IX模式后进行修改。最后,它需要将R a9锁定为X模式。
  • 如果事务T3读取文件F a中的所有记录,则事务T3需要锁定数据库,并以IS模式锁定区域A。最后,需要在S模式下锁定F a。
  • 如果事务T4读取了整个数据库,则T4需要将数据库锁定为S模式。