封锁的粒度
封锁对象的大小叫粒度
封锁的对象: 逻辑单元,物理单元
逻辑单元:属性值,属性值集合,元组关系,索引项,整个索引,整个数据库等
物理单元:页(数据页,索引页),物理记录
说明:
- 封锁的粒度与系统的并发度和并发控制的开销密切相关。
- 封锁的粒度越大,封锁的逻辑单元数量越少,并发度越小,系统开销越小。
- 封锁粒度越小,并发度越高,开销越大。
多粒度封锁
多粒度封锁是指在同一系统中同时支持多种不同粒度供不同事务选择。
选择粒度的原则,考虑系统并发度和系统开销。
具体为:
处理多个关系的大量元组的用户事务:以数据库为封锁单位
处理大量元组的用户事务:以关系为封锁单位
只处理少量元组的用户事务:以元组为封锁单位
粒度树: 以树形结构来表示多级封锁粒度。根节点是整个数据库,表示最大粒度。叶节点是最小粒度。
多粒度封锁协议
允许多粒度树中的每一个结点都被独立地加锁,但是一个结点被加锁,其子节点都会被加锁
显式加锁:直接加锁
隐式加锁:上级结点被加锁
显式封锁和隐式封锁效果是一样的,系统检查封锁冲突时既要查显式,又要查隐式。
对某个事务加锁,系统要检查:
该数据对象:有无显式锁与之冲突
所有上级结点:检查本事务的显式封锁是否与该事务的上级隐式封锁冲突
所有下级结点:所有上级的显式封锁是否与将要加到下级的隐式封锁冲突
意向锁
目的: 提高对某个数据对象加锁的系统的检查效率
意向锁的含义:如果对一个结点加意向锁,说明它的下层节点正在被加锁。也是说,对任意结点加锁,必须对上层结点加意向锁。
例:对任意元组加锁,先对上层数据库加意向锁。
常用意向锁:
意向共享锁IS锁
意向排他锁IX锁
意向共享排他锁SIX锁
IS锁:要对结点加IS锁,要对其子节点加S锁
IX锁:要对结点加IX锁,要对其子节点加X锁
SIX锁:对结点加S锁和IX锁
锁的强度:指锁对其他锁的排斥性,一个事务在申请封锁时用强锁代替弱锁是更安全的,反之则不然。
X > SIX > S = IX > IS
具有意向锁的多粒度封锁方法:
自上而下的申请封锁
自下而上的解除封锁
例:
事务T要对关系R1加S锁
- 对R1上层数据库加IS锁
- 检查R1和数据库是否有相斥的锁
- 不再需要检查R1下元组是否有不相容的锁
以上内容基于圣才教育数据库系统概论ppt 修改整理