1、封锁粒度是什么?
封锁对象的大小称为封锁的粒度
封锁对象:逻辑单元、物理单元
2、选择封锁粒度的原则?
封锁粒度和系统的并发度、系统的开销密切相关
- 封锁的粒度越大 数据库能够封锁的数据单元就越少,并发度就越小,系统开销也就越小
- 封锁的粒度越小 数据库能够封锁的数据单元就越多,并发度就越高,系统开销也就越大
因此封锁粒度是一把双刃剑,所以在一个系统当中如果能够提供多种封锁粒度以便不同的事务按照自己的需求选择就比较完美了
这就是所谓的:多粒度封锁
3、具体如何选择封锁粒度呢?
- 需要处理大量元组的用户事务,以关系为封锁单元
- 需要处理多个关系的大量元组的用户事务,以数据库为封锁单元
- 只是处理少量元组的用户事务,以元组为封锁单元
4、多粒度封锁
- 以树形结构来表示多级封锁粒度
- 根节点是整个数据库,表示最大的数据粒度
- 叶节点是最小的数据粒度
三级粒度树 四级粒度树
5、多粒度封锁协议
- 允许粒度树中的每一个节点独立的被加锁
- 对一个节点加锁,意味着这个节点的所有后裔节点也同样被加上相同类型的锁
- 因此多粒度封锁中一个数据对象可能以两种方式封锁:显式封锁、隐式封锁
6、显式封锁和隐式封锁
- 显式封锁: 直接加到数据对象上的封锁
- 隐式封锁:是该数据对象没有独立加锁,是由于其 上级结点加锁而使该数据对象加上了锁
- 显式封锁和隐式封锁的效果是一样的
显然这种封锁的效率很低,因此引入了一种新型封锁-意向锁
7、意向锁的目的
- 目的是简化加锁时系统的检查过程,提高了对某个数据对象加锁时系统的检查效率
8、意向锁的类型
- 意向共享锁(IS锁)
- 意向排它锁(IX锁)
- 共享意向排它锁(SIX锁):当我们想读一个数据对象,并且更新他的后代节点需要加SIX锁
9、意向锁的封锁的相容性
- 要考虑隐式锁的因素
- 要考虑意向锁并不是给所有的后代节点都加锁
- 要考虑不同后代的因素,只要有可能不冲突就可以满足意向锁的封锁请求,如果冲突了,系统会在事务给后代节点加锁冲突的时候拒绝他的请求
10、锁的强度
锁的强度是指他对其它锁的排斥程度
一个事务在申请封锁的时候以强锁代替弱锁时安全的,反之则不然。
11、具有意向锁的多粒度封锁方法的特点
- 申请封锁应该自上而下
- 释放封锁应该自下而上
优点:
12、小结+思考
13、本章总结
来源:CSDN
作者:yky__xukai
链接:https://blog.csdn.net/yky__xukai/article/details/104869947