-
第十一章-并发控制
11章 并发数据
-
了解并发需要先了解的概念:
- 1.数据库是一个可以共享资源,可以多用户同时使用一个数据库,该数据库称为多用户数据库,如订票系统、银行系统
-
2.多事务执行方式:
-
1.事务串行执行 :
务执行完在执行下一个事务 - 缺点资源浪费
2.交叉并发方式 :
在单处理机系统中,事务的并行事务是提供交叉运行,如T1事务去读数据A,读需要耗时,T2事务就开始运行,T1读完又去执行T1下面的操作,遇到T1等待又去执行T2,以此类推
3.同时并发方式:-- 了解,该书不详讲
多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务自正的并发
-
10.1并发控制概念:
-
事务是并发控制的基本单位,并发控制机制任务是:
-
1.并发操作进行正确的调度(正确的调各并发的事务)
2.保证事务的隔离性(保证事务在执行的过程中不能被其它的事务打扰)
3.保证数据库的一致性(刚读A数据为1,马上A就变成2,这就不一致了)
-
-
为什么需要并发控制:并发时又多个事务在执行,如果没有正确的调度,调度事务就会打架,产生数据混乱
-
用记号R(x)标识读数据x,W(x)表示写数据x
-
案例1飞机卖票-并发操作带来的不一致性:
-
售票窗口(T1事务)和售票窗口(T2事务),并发去访问数据库中的票数余额A=16,如果T1和T2都,
卖出去一张票,都A-1=15,然后写回数据库,因为T1和T2都执行了A-1=15,所以明明是卖出去两张,实际卖出去了一张
-
-
说明:
-
1.案例1的情况称为数据库的不一致性,是由并发产生的
2.T1和T2的存在顺序的调度是随机的
3.并发操作带来的数据不一致性包括:丢失数据、不可重复度、读'脏'数据
-
-
1.丢失数据:
-
T1和T2事务,读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1数据丢失,如售票案例
-
-
-
2.不可重复读:
-
T1读取数据A=15,T2对A进行更改,T1在去读的时候就读不到上一次的结果
-
不可重复读分三种情况,1.读取值不一致、2.数据消失、3.多出数据(2和3称为幻影现象):
-
1.读取不一致:T1和T2读A=15,T2更改A,T1在去校对重读A,就与第一次读取的值不一致
2.数据消失:T1按照条件查找到数据,T2删除了其中部分的数据,T1在按同样的数据去读取时,发现数据就消失了
3.多出数据:T1按照条件查找到数据,T2插入了一些的数据,T1在按同样的数据去读取时,发现多了一些数据
-
-
-
-
3.读“脏”数据:
-
读“脏”数据表达读到不正确的数据
-
T1读取数据A=15,并修改为99,T2读取数据A=99,当T1撤销修改操作,A改回15,那么T2读的就是“脏”数据,因为和数据库的数据不一致
-
-
-
说明:
-
1.以上的3类不一致主要原因就是并且操作破坏了事务的隔离性
2.并发操作要正确的方式调度,使一个事务的执行不受其它事务的影响,避免造成数据的不一致(某些情况下可以数据不一致,这种情况是因为影响不大)
3.并发的主要技术:封锁、时间戳、乐观控制法、多版本并发控制
-
11.2 封锁:
-
1.什么是封锁:
-
封锁是实现并发控制的一个非常重要技术
-
封锁就是事务T1在等某个数据对象(如表、记录)操作之前,先向系统发生请求,对其加锁。加锁后T1对该
数据对象就有了一定的控制,在事务T1释放锁之前,其它事务不能更新该数据对象
-
-
封锁是实现并发控制的一个非常重要技术
-
2.基本的封锁类型:
-
一个事务对数据对象加锁后拥有什么样的控制是由封锁的类型决定
基本的封锁类型:排它锁(简称:x锁)、共享锁(简称:s锁) -
2.1.排它锁:
- 排它锁 -- 又称写锁
-
理解:当某个事务T1,给数据对象A加上x锁后,只有T1可以进行读取和修改,
其它的事务就不能在对A加任何类型的锁,只到T1释放A上的锁,这样不就保证了,
T1释放A上的锁时,不被其它事务所干扰
-
2.2.共享锁:
-
排它锁 -- 又称读锁
-
理解:当某个事务T1,给数据对象A加上s锁后,T1可以进行读取但不能进行修改,
其它事务可以在对A加上s锁,但不能加x锁,直到T1释放了锁,这样就保证了,
在其它事务都可以读A,都不能修改A,保证了数据一致
-
-
2.3 锁的相容钜陈:
-
-
-
3.细节:
-
封锁 也可以叫 加锁
-
11.3 封锁协议:
- 1.封锁协议的作用:解决三个不一致性(不可重复读、丢失修改、读"脏"数据)
-
2.什么是封锁协议:封锁协议是指运用x锁和s锁对数据对象加锁时,约定一些规则,这些规则为封锁协议
- 例如何申请x锁和s锁、持锁时间、何时释放等
-
3.三级封锁协议(该数只讲三级协议):封锁方式规定不同的规则,形成不同的封锁协议,不同的协议在不同
的程度上为并发操作的正确调度提供一定的保证。-
3.1.一级协议:
- 1.什么是一级封锁协议:一级封锁协议是指事务T1在修改数据R正确必须对其加X锁直到事务结束才释放;事务又分正常结束、非正常结束
-
2.一级封锁协议作用:
-
1.防止丢失数据,并保证事务T1可恢复(恢复:这里的恢复指可以重复读到数据)
2.在一级封锁协议中,只是读数据是不用加锁的
-
-
3.一级封锁协议存在问题:一级封锁协议可能会出现,不可重复读、和读"脏"数据
-
4.解决丢失修改问题:
-
-
3.2二级封锁协议:
-
1.什么是二级封锁协议:二级封锁协议是一级封锁协议增强事务T1在读取数据R前必须对其加S锁,读完后即可释放S锁
-
2.二级封锁协议作用:
-
1.防止丢失数据,和读“脏”数据
-
-
3.二级封锁协议存在问题:由于读完数据后即可释放S锁,所以会存在,不可重复读
-
4.解决读“脏”数据问题:
-
-
-
3.3三级封锁协议:
-
1.什么是三级封锁协议:三级封锁协议是一级封锁协议增强事务T1在读取数据R前必须对其加S锁,直到事务的结束
-
2.三级封锁协议作用:
-
1.防止丢失数据、读“脏”数据和不可重复读
-
3.解决不可重复读问题:
-
-
-
-
3.1.一级协议:
-
4.课本总结:
-
1.三级协议的主要区别是,什么操作需要申请封锁协议以及何时释放锁
1.1.写的操作必须是-x锁,释放时间-直到事务结束
1.2.读的操作的释放时间-1.读完就释放-2.直到事务的结束
2.不同的封锁协议使事务达到的一致性级别不同,封锁协议越高,一致性程度越高 -
-
-
5.个人总结:
-
1.一级封锁协议:事务加x锁,释放时间-事务结束,防止丢失修改,有不可重复的和读“脏”数据问题
2.二级封锁协议:事务加s锁,释放时间-读完就释放,防止丢失修改,读“脏”数据,有不可重复的和问题
3.三级封锁协议:事务加s锁,释放时间-事务结束,防止丢失修改,读“脏”数据,不可重复
-
11.4 活锁和死锁:
11.4.1 活锁:
-
1.什么是活锁:一个事务长时间的去等待操作(或获取)一个数据对象,都没有等到
-
例子:事务T1封锁封锁了数据R,T2请求封锁R,T3请求封锁R,T1释放了R,但得到请求封锁的是T3,
如果T4又请求封锁R,T3释放,T4得到请求封锁,T2又没得到请求封锁,这就是活锁 - 可看图理解
-
-
1.1.怎么避免活锁:
-
1.先来先服务(就是多个事务请求同一个数据对象,谁先来就执行谁)
-
2.按优先级(每一个按优先级来执行,如有紧急的事务,可以提高该事务的优先级来先执行)
-
-
2.什么是死锁:怎么都请求不到数据对象
-
例子:事务T1对R1封锁,事务T2对R2封锁,现在事务T1要对R2请求封锁,因为T2在封锁中,请求不了,
T2有要对R1请求封锁,T1和T2请的请求不了,就就是死锁 - 可看图理解
-
-
2.1.产生死锁的原因:两个或多个事务,都一级封锁了一些数据对象,然后又请求被其它事务封锁的数据对象加锁,从而死锁
-
2.1.2.解决死锁的方法:预防死锁-和诊断与解除死锁
-
2.1.3预防死锁:预防死锁分为,1.一次封锁法、2.顺序封锁法
-
预防死锁就是压迫破坏产生死锁的条件
-
2.1.4.一次封锁法:
-
1.什么是一次封锁法:每个事务必须一次将所有的数据全部加锁,否则就不能执行
-
2.存在问题:
-
1.降到系统并发度(你的封锁完了,其它事务怎么用)
-
2.难于事先精确确定封锁对象(我怎么最知道我要确定要用哪些数据对象)
-
-
-
2.1.5.顺序封锁法:
-
1.什么是顺序封锁法:预先对数据对象排序(数据库管理系统做的活 - 排序),所有事务都按这个事务进行封锁
-
排序?什么意思:给每个事务排序,只有封锁了1,才能去封锁2,以此内推
-
-
2.存在问题:
-
1.维护成本高(进行了增删改操作,就又要重新排序)
-
2.难以实现(事务的封锁,是随着事务的执行而动态决定的,很难确定要封锁哪个对象)
-
-
2.1.5.预防死锁总结:
-
1.预防死锁不适合数据库
-
2.数据库在解决死锁的问题上普遍才用诊断与解除死锁
-
-
-
-
-
-
2.2.诊断与解除死锁:死诊断分为:1.超时法、2.等待图法
-
2.2.1.超时法:
-
1.什么是超时法:事务等待时间超过规定的时限,就认为发生了死锁
-
2.优缺点:
-
优点:实现简单
-
缺点:1.可能误判,如事务因为其它原因导致超时,2.时限限制过长,死锁发生后不能及时发现
-
-
-
2.2.2.等待图法:
-
1.什么是等待图法:事务等待图是一个有向图G=(T,U)、其中:
-
T为结点集合(每个结点表示运行的事务),
-
U为边的集合(每条边表示事务等待情况)
-
-
例:T1等待T2,则T1,T2之间划一条有向边,从T1指向T2
-
2.等待图法说明:
-
1.数据库管理系统的并发控制子系统按周期性(如每隔多少秒),生成事务等待图,检测事务,如果存在回路,则表示系统中出现死锁
-
2.解除死锁的方法是限制一个处理死锁代价最小的事务,将其撤销,释放该事务的所有锁,使其它事务能继续运行下去
-
-
-
-
-
2.2.诊断与解除死锁:死诊断分为:1.超时法、2.等待图法
出处:https://www.cnblogs.com/Mr-shne/p/16934631.html