多粒度封锁
Last updated
Last updated
封锁粒度(Granularity):封锁对象的大小,封锁对象可以是逻辑单元,也可以是物理单元。
封锁粒度与系统的并发度和并发控制的开销密切相关。
选择封锁粒度应该同时考虑并发度和开销两个因素。
以数据库为封锁单位:需要处理多个关系的大量元组的用户事务;
以关系为封锁单位:需要处理大量元组的用户事务;
以元组为封锁单位:只处理少量元组的用户事务;
多粒度封锁(Multiple Granularity Locking)
在一个系统中同时支持多种封锁粒度供不同的事务选择
多粒度封锁协议允许多粒度树中的每个节点被独立地加锁。对每个节点的加锁意味着这个节点的所有后裔节点也被加以同样类型的锁。
显式封锁:应事务的要求直接加到数据对象上的锁
隐式封锁:该数据对象没有独立加锁,是由于其上级节点加锁而使得该数据对象加上了锁
判断能否对一个数据对象加锁:
检查该数据对象是否有显式封锁与之冲突
检查其所有上级节点,看本事务的显示封锁是否与该对象上的隐式封锁冲突
检查其所有下级节点,看上面的显式封锁是否与本事务的隐式封锁冲突