1.封锁的粒度
封锁对象的大小称为封锁的粒度。封锁的对象可以是逻辑单元(如属性、元组、关系、索引项、整个索引直至整个数据库),也可以是物理单元(如数据页或索引页)。
封锁粒度与系统的并发度和并发控制的开销密切相关。封锁的粒度越大,并发度越小,但系统开销也就越小;封锁的粒度越小,并发度越高,但系统开销也就越大。
选择封锁粒度时必须同时考虑封锁对象和并发度两个因素,对系统开销与并发度进行权衡,以求得最优效果。一般说来,需要处理大量元组的用户事务可以以关系为封锁对象:需
要处理多个关系的大量元组的用户事务可以以数据库为封锁对象;而对于一个处理少量元组的用户事务,可以以元组为封锁对象以提高并发度。
多粒度(multiple granularity)机制是指通过允许各种大小的数据项并定义数据粒度的层次结构,其中小粒度数据项嵌套在大粒度数据项中。对此,可以构造一个粒度层次图,粒度层次图像一棵倒置的树,故也称多粒度树。
下图为一个由四层结点构成的多粒度树,该粒度树包括:根结点、区域类型结点、文件类型结点和记录类型结点。
最高层是根结点,表示整个数据库,其下的结点是区域类型结点,而数据库是由这些区域组成。
第二层是区域类型结点,每个区域类型结点又以文件类型结点作为其子结点,每个区域是由这些文件类结点组成,任何文件都不能处于一个以上的区域中。
第三层是文件类型结点,文件类型结点下的是记录类型结点,文件是由作为其子结点的记录组成。
第四层(最底层)是记录类型结点,也称叶结点。
粒度树中的每个结点都可以单独加锁(共享锁或排它锁)。
当一个事务对结点加锁时,那么该事务也可以同样类型的锁,隐含地封锁该结点的全部后代结点。
采用多粒度树的好处是:减少对后代结点加锁的系统代价。
2.意向锁
意向锁是与共享锁和排它锁相关联的另一种锁。假如一个结点加了共享型意向锁(IS),
那么将在树的较低层进行显式封锁,可以加共享锁,但不能加排它锁;假如一个结点加了排它型意向锁(IX),那么将在树的较低层进行显式封锁,可以加排它锁或共享锁:若一个结点加了共享排它型意向锁(SIX),则以该结点为根的子树被显式地加共享锁。这些锁类型的相容函数矩阵如图所示。
3.多粒度封锁协议
多粒度封锁协议(multiple-granularity looking protocol)允许多粒度树中的每个结点被独立地加锁,对某结点加锁意味着该结点的所有后代结点也被加了同类型的锁。
多粒度封锁协议采用这些锁(S、IS、X、IX和SIX)可以保证调度的可串行性,每个事
务T要求按如下规则对结点Q加锁:
(1)事务T必须遵循锁相容函数矩阵。
(2)事务T必须首先封锁根结点,且可以加任意类型的锁。
(3)仅当T当前对结点Q的父结点持有IX和IS锁时,T对结点Q可加S锁或IS锁。
(4)仅当T当前对结点Q的父结点持有IX和SIX锁时,T对结点Q可加X锁、SIX锁或IX锁。
(5)仅当T未曾对任何结点解锁时,T可对结点加锁,即T是两阶段的。
(6)仅当T不持有Q的子节点的锁时,T可对结点Q解锁。
注意:多粒度封锁协议要求加锁按自顶向下(从根到叶)的顺序进行,而锁的释放则按自底向上(从叶到根)进行。
并发控制的方法还有基于时间戳协议、基于有效性检查协议、快照隔离等。