封锁对象的大小称为封锁粒度。封锁对象可以是逻辑单元,也可以是物理单元。以关系数据库为例,封锁对象可以是这样一些逻辑单元:属性值、属性值的集合、元组、关系、索引项、整个索引直至整个数据库;也可以是这样一些物理单元:页(数据页或索引页)、物理记录等。
封锁粒度与系统的并发度和并发控制的开销密切相关。直观地看,封锁的粒度越大,数据库所能够封锁的数据单元就越少,并发度就越小,系统开销也越小;反之,封锁的粒度越小,并发度越高,但系统开销也就越大。
一个系统中同时支持多种封锁粒度供不同的事务选择是比较理想的,这种封锁方法称为多粒度封锁。选择封锁粒度应该考虑封锁开销和并发度这两个因素。
- 多粒度封锁
多粒度封锁,首先要定义多粒度树。多粒度树的根节点是整个数据库,表示最大的数据粒度。叶节点表示最小的数据粒度。
如下是一个三级粒度树。根节点为数据库,数据库的子节点为关系,关系的子节点为元组。
还可以定义四级粒度树,如数据库、数据分区、数据文件、数据记录。
多粒度封锁协议允许多粒度树中的每个