本节将从理解粒度的含义开始学习。
粒度: 它是允许锁定的数据项的大小。
多粒度
- 它可以定义为将数据库分层分解为可以锁定的块。
- 多粒度协议增强了并发性并减少了锁定开销。
- 它保留了锁定内容和锁定方式的轨迹。
- 可以轻松决定锁定数据项还是解锁数据项。这种类型的层次结构可以图形方式表示为树。
示例: 考虑一个具有四级节点的树。
- 第一级或更高级别显示整个数据库。
- 第二级表示类型区域的节点。 更高级别的数据库恰好包含这些区域。
- 该区域由子节点组成,称为文件。 没有文件可以存在于多个区域中。
- 最后,每个文件都包含称为记录的子节点。 该文件恰好具有作为其子节点的记录。 没有记录代表多个文件。
因此,从顶层开始的树的级别如下:
在此示例中,最高级别显示整个数据库。以下级别是文件,记录和字段。
有三种额外的锁定模式,具有多种粒度:
意图模式锁定
意图共享(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需要锁定数据库,并且区域A需要在IS模式下。 - 最后,它需要在S模式下锁定Fa。
- 如果事务T4读取整个数据库,则T4需要以S模式锁定数据库。