第六章 事务管理(并发控制技术1)
第六章 事务管理(并发控制技术1)
锁
两阶段封锁协议
一 并发控制
1)什么是并发?
2)并发的重要性?
1.提高吞吐量和资源利用率
2.减少等待时间
3)不加控制的并发会怎么样?
1)实现有效并发的手段?
基于图
基于时间戳
快照隔离
2)两种锁的区别是什么?为什么需要s锁?
![image-20211020104748318](https://gitee.com/cxg_code/image/raw/master/img/20211020104748.png)
二 锁与封锁协议
2.1 锁
为何引入锁,不同类型锁的作用?
![image-20211020104842002](https://gitee.com/cxg_code/image/raw/master/img/20211020104842.png)
引入锁机制:
是为了保证数据的一致性(事务的隔离性)和提高系统的并发处理能力!
或者说,为了保证应用的有效性(两人不会订到同一位置火车票,查看到一个不存在的成绩--如教务处刚误输一个学生的成绩后马上又删除)
S锁已明显增强了并发能力:
因为可能95%以上的应用是读数据,更新应用的频率非常小。没有S锁,系统的发处理能力会大大降低,仅比串行调度略好。
何谓锁相容矩阵,S锁带来多大并发能力?
![image-20211020105100041](https://gitee.com/cxg_code/image/raw/master/img/20211020105107.png)
2.2 封锁协议
指一组加锁规则!
什么是封锁协议,加锁后的调度是什么样?
![image-20211020105158784](https://gitee.com/cxg_code/image/raw/master/img/20211020105205.png)
这是一个可串行化调度?
![image-20211020105505313](https://gitee.com/cxg_code/image/raw/master/img/20211020105505.png)
2.3 死锁
什么是死锁,如何引起,有何危害?
(直观比喻:两个小孩争抢蛋糕和牛奶的情形)
![image-20211020105909347](https://gitee.com/cxg_code/image/raw/master/img/20211020105913.png)
形成两个事务“相互等待”对方释放资源各自才能往下继续做的僵局!
不加控制的封锁机制,可能引起死锁现象发生!
2.4 活锁
什么是活锁,如何引起,有何危害?
![image-20211020110154514](https://gitee.com/cxg_code/image/raw/master/img/20211020110202.png)
Starvation饿死(活锁) is also possible if concurrency control manager is badly designed. For example:
1)A transaction may be waiting for an X-lock on an item, while a sequence of
other transactions request and are granted an S-lock on the same item.
2) The same transaction is repeatedly rolled back due to deadlocks.
出现一个事务永远(长时间)等待某一数据项被其它事务释放后才能进行封锁的现象!
三 两阶段封锁协议
3.1 两阶段封锁协议
两阶段封锁协议的主要特点?
![image-20211020110545270](https://gitee.com/cxg_code/image/raw/master/img/20211020110545.png)
![image-20211020110623904](https://gitee.com/cxg_code/image/raw/master/img/20211020110624.png)
事务T1-T4都是两阶段封锁协议吗,封锁点在何处?
T1和T2不是两阶段封锁协议,
T3和T4都是两阶段封锁协议!
两阶段封锁协议的主要用途?
![image-20211020110744265](https://gitee.com/cxg_code/image/raw/master/img/20211020110749.png)
示例分析一:两阶段封锁协议&可串行化
两阶段封锁调度P等价于何串行调度?
![image-20211020110933881](https://gitee.com/cxg_code/image/raw/master/img/20211020110946.png)
示例分析二:两阶段封锁&死锁
两阶段封调度Q能够顺利执行完成?
3.2 可串行化与两阶段封锁的关系
Q是冲突可串行化调度吗?
调度Q符合两段锁协议吗?
![image-20211020112709054](https://gitee.com/cxg_code/image/raw/master/img/20211020112709.png)
1、等价于串行调度
T1-》T2-》T3 冲突可串行化
2、不符合!
两阶段封锁协议保证冲突可串行化,
冲突可串行化未必符合两阶段封锁!
3.3 级联调度&两阶段封锁协议p.376
![image-20211020112910555](https://gitee.com/cxg_code/image/raw/master/img/20211020112917.png)
调度P和Q的执行效果有何不同?
![image-20211020112937071](https://gitee.com/cxg_code/image/raw/master/img/20211020112937.png)
3.4 严格两阶段封锁协议p.376
![image-20211020113250762](https://gitee.com/cxg_code/image/raw/master/img/20211020113251.png)
什么是严格两阶段封锁协议,该调度是吗?
严格两阶段封锁协议有何用途?
可保证调度不会出现级联回滚!
![image-20211020113338226](https://gitee.com/cxg_code/image/raw/master/img/20211020113344.png)
3.5 强两阶段封锁协议p.376
![image-20211020113433935](https://gitee.com/cxg_code/image/raw/master/img/20211020113440.png)
![image-20211020113538776](https://gitee.com/cxg_code/image/raw/master/img/20211020113544.png)
3.6 锁转换
什么是带锁转换的两段锁协议?
带锁转换的两阶段封锁协议:
– 第一阶段:
能申请lock-S
能申请lock-X
能将lock-S 转换为lock-X (upgrade升级)
– 第二阶段:
能释放 lock-S
能释放 lock-X
能将lock-X 转换为lock-S(downgrade降级)
这个协议确保了冲突可串行化.
![image-20211020113940238](https://gitee.com/cxg_code/image/raw/master/img/20211020113947.png)
四 封锁机制的实现
锁管理器的作用,主要组成部分?
锁管理器的基本工作原理?
![image-20211020114111952](https://gitee.com/cxg_code/image/raw/master/img/20211020114112.png)
![image-20211020114306436](https://gitee.com/cxg_code/image/raw/master/img/20211020114314.png)
Read(A),Read(B),Read(C),C=A+B,Write(C)
使用两阶段封锁协议为该事务加锁。