11.1 并发控制概述
- 丢失修改
- 不可重复读
- 读“脏数据
11.2 封锁
排他锁(写锁)X锁 共享锁(读锁)S锁
11.3 封锁协议
-
一级封锁协议
事务T在修改数据R之前必须加X锁,事务结束释放
-
二级封锁协议
一级封锁协议的基础上在事务T读R之前加S锁,读完后释放
-
三级封锁协议
一级封锁协议的基础上在事务T读R之前加S锁,直到事务结束释放
11.4 活锁和死锁
11.4.1 活锁
活锁可能使事务永远等待,避免的方法是先来先服务策略
11.4.2 死锁
两个事务互相等待,形成死锁
- 死锁的预防
(1) 一次封锁法:每个事务必须一次将所有要是用的数据加锁,否则就不能继续执行
(2) 顺序封锁法:预先对数据对象规定一个封锁顺序,按顺序封锁 - 死锁的诊断与解除
1. 超时法:事务的等待时间超过了规定时限,就认为发生了死锁
2. 等待图法:如果图中存在回路,则表示系统出现了死锁
11.5 并发调度的可串行性
11.5.1 可串行化 (并发事务正确调度的准则)
可串行化调度是指多个事务事的并发执行是正确的,当且仅当其结果与某一次串行地执行这些事务时的结果相同
冲突可串行化调度是指一个调度在保证冲突操作次序不变的情况下,通过交换两个事务不冲突操作的次序得到另一个调度,如果得到的另一个调度是串行的,则这个调度为冲突可串行化调度
11.6 两段锁协议
在对任何数据进行读、写操作前,首先要申请并获得对该数据的封锁;在释放一个封锁后,事务不再申请和获得任何其他封锁
11.7 封锁的粒度
封锁对象的大小称为封锁粒度
11.7.1 多粒度封锁
对一个节点加锁意味着对这个节点的所有后继节点也加以同样类型的锁
11.7.2 意向锁
如果对一个节点加意向锁,则说明该节点的下层节点正在被加锁
一个事务在申请封锁时必须加强锁代替弱锁