热门关键字:  项目经理  分析师  中间件  CEO  报名费





封锁粒度

来源: 作者: 时间:2008-04-02 点击:

封锁对象的大小称为封锁粒度(Granularity).封锁对象可以是逻辑单元,也可以是物理单元.在关系数据库中,可以封锁的逻辑单元有:属性值,属性值的集合,元组,关系,索引项,整个索引,数据库.可以封锁的物理单元:页,块等,物理单元与具体的DBMS系统有关,在这里不做介绍.


封锁粒度与系统的并发度,并发控制的系统开销密切相关.封锁的粒度越大,并发度越小,系统开销也越小;封锁的粒度越小,并发度越大,系统的开销也越大.如果封锁粒度是关系,事务T1修改关系R中的元组L1,T1则对整个关系R加锁,这时事务T2需要修改关系R中的元组L2,则必须等待,直到T1释放关系R上的锁.如果封锁粒度是比较小的元组,T1和T2可以同时加锁,不需要等待,提高了并发度,但是系统用于并发控制的开销加大.并不是封锁粒度越小就越好,如事务T需要查询整个表,如封锁粒度是元组,事务T需要对关系中的每一个元组加锁,系统开销将增大.因此一般DBMS中支持多种封锁粒度,以便事务根据并发度和并发开销两个因素进行选择.一般而言,需要处理少量元组的事务,以元组为封锁粒度比较合适;需要处理大量元组的事务以关系为封锁粒度比较合适;需要处理多个关系的大量元组的事务以整个数据库为封锁粒度比较合适.


多粒度封锁,需要首先定义多粒度树,多粒度树的根节点表示最大的封锁粒度,叶节点表示最小的封锁粒度.典型的三级多粒度树如下,其中根节点为数据库,中间节点为关系,叶节点是元组.


多粒度封锁协议允许每个节点被独立地加锁,对于每一个节点加锁意味着其下级节点被加以同样类型的锁.所以在多粒度封锁中,一个节点被加锁的情形有两种:显式封锁和隐式封锁.显式封锁是事务直接加到节点上的封锁;隐式封锁是由于其上级节点封锁后而使该节点封锁.如果显式封锁数据库,则数据库中所有的关系被隐式封锁,同理,每个关系中的元组被隐式封锁.如果对关系R1显式封锁,则关系R1中的每个元组被隐式封锁.无论显式封锁还是隐式封锁,其效果相同.在系统检查封锁冲突时,不仅要检查显式封锁,还要检查隐式封锁.


在多粒度封锁中,事务T要对节点A实施显式封锁(同时要对A的所有下级节点实施隐式封锁),要进行封锁冲突检查,首先检查A是否有显式封锁,然后检查其上级节点是否隐式封锁了A,还要检查A的下级节点是否有显式封锁.这样的检查方法效率很低,为了改进封锁冲突检查的效率,引进了一种新型的意向锁(Intention Lock).


所谓意向锁,对任意一节点封锁时,必须先对其上层节点(所有的上级节点)加意向锁;反之,如果对一个节点有意向锁,则说明其下级节点正在被封锁.
按下级节点封锁类型,意向锁有三种:


意向共享锁(Intent Share Lock,简称IS锁):如果对节点加IS锁,表示它的下级节点拟(意向)加S锁.如对元组加S锁,首先对元组所在关系和关系所在数据库加IS锁.


意向排它锁(Intent Exclusive Lock,简称IX锁):如果对节点加IX锁,表示它的下级节点拟(意向)加X锁.如对元组加X锁,首先对元组所在关系和关系所在数据库加IX锁.


共享意向排它锁(Share Intent Exclusive Lock,简称SIX锁):如果对节点加SIX锁,表示先对该节点加S锁,再加IX锁.如对关系加SIX锁,表示要读整个表(加S锁),同时更新个别元组(关系加IX锁,元组加X锁).


引进意向锁后,封锁冲突检查只需要检查从根节点开始到需要加锁的节点为止的节点,大大降低了封锁冲突检查的开销.加了意向锁后的相容矩阵:
T1 T2
X
S
IS
IX
SIX
-
X
N
N
N
N
N
Y
S
N
Y
Y
N
N
Y
IS
N
Y
Y
Y
Y
Y
IX
N
N
Y
Y
N
Y
SIX
N
N
Y
N
N
Y
-
Y
Y
Y
Y
Y
Y

上一篇:死锁
下一篇:数据字典




最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
企业电子商务

赞助商