数据库并发控制

上传人:cl****1 文档编号:586220138 上传时间:2024-09-04 格式:PPT 页数:97 大小:877.50KB
返回 下载 相关 举报
数据库并发控制_第1页
第1页 / 共97页
数据库并发控制_第2页
第2页 / 共97页
数据库并发控制_第3页
第3页 / 共97页
数据库并发控制_第4页
第4页 / 共97页
数据库并发控制_第5页
第5页 / 共97页
点击查看更多>>
资源描述

《数据库并发控制》由会员分享,可在线阅读,更多相关《数据库并发控制(97页珍藏版)》请在金锄头文库上搜索。

1、数据库系统原理数据库系统原理多事务执行方式多事务执行方式(1)事)事务串行串行执行行每每个个时刻刻只只有有一一个个事事务运运行行,其其他他事事务必必须等到等到这个事个事务结束以后方能运行。束以后方能运行。缺缺点点:不不能能充充分分利利用用系系统资源源,发挥数数据据库共享共享资源的特点。源的特点。T1T2T3数数据据库库并并发发控控制制多事务执行方式(续)多事务执行方式(续)(2)交叉并)交叉并发方式方式事事务的的并并发执行行是是这些些并并发事事务的的操操作作轮流流交叉运行。交叉运行。是是单处理理机机系系统中中的的并并发方方式式,能能够减减少少处理机的空理机的空闲时间,提高系,提高系统的效率。的

2、效率。T1T2T3数数据据库库并并发发控控制制(3)同)同时并并发方式方式多多处理理机机系系统中中,每每个个处理理机机可可以以运运行行一一个个事事务,多多个个处理理机机可可以以同同时运运行行多多个个事事务,实现多个事多个事务真正的并行运行。真正的并行运行。DBMS必必须提供并提供并发控制机制。控制机制。并并发控控制制机机制制是是衡衡量量一一个个DBMS性性能能的的重重要要标志之一。志之一。多事务执行方式(续)多事务执行方式(续)数数据据库库并并发发控控制制第八章第八章数据库并发控制数据库并发控制8.1数据数据库的并的并发问题8.2并并发控制方法控制方法8.3并并发调度的可串行性度的可串行性8.

3、4两段两段锁协议8.5SQLServer的并的并发控制控制数数据据库库系系统统原原理理学习目标学习目标掌握并掌握并发控制的基本概念,理解并控制的基本概念,理解并发操操作作带来的三来的三类数据不一致数据不一致问题;掌握封;掌握封锁的的类型和封型和封锁协议,理解并,理解并发调度的可串行性度的可串行性和两段和两段锁协议。学学习重点重点封封锁协议并并发调度的可串行性度的可串行性第八章第八章数据库并发控制数据库并发控制数数据据库库系系统统原原理理第八章第八章数据库并发控制数据库并发控制8.1数据数据库的并的并发问题8.2并并发控制方法控制方法8.3并并发调度的可串行性度的可串行性8.4两段两段锁协议8.

4、5SQLServer的并的并发控制控制数数据据库库并并发发控控制制第一节第一节数据库的并发问题数据库的并发问题事事务是是并并发控控制制的的基基本本单位位,保保证事事务的的ACID性性质是事是事务处理的重要任理的重要任务。多多个个事事务对数数据据库并并发操操作作是是造造成成破破坏坏事事务ACID性性质的可能原因之一。的可能原因之一。并并发控制机制的任控制机制的任务对并并发操操作作进行行正正确确调度度,以以保保证事事务的的隔隔离性,离性,进而保而保证数据数据库的一致性。的一致性。数数据据库库并并发发控控制制数数据据库库并并发发控控制制数据库的并发控制(续)数据库的并发控制(续)1、问题的提出的提出

5、例例1:飞机机订票系票系统中的一个活中的一个活动序列:序列:结果果:卖出两出两张机票机票,数据数据库中机票余中机票余额只减少只减少1。数数据据库库并并发发控控制制1:甲售票点:甲售票点ReadA=162:乙售票点:乙售票点ReadA=163:甲售票点:甲售票点售票一售票一张WriteA=A-1=154:乙售票点:乙售票点售票一售票一张WriteA=A-1=152、并、并发操作操作带来的数据不一致性来的数据不一致性丢失修改(失修改(lostupdate)不可重复不可重复读(non-repeatableread)读“脏”数据(数据(dirtyread)数数据据库库并并发发控控制制数据库的并发控制(

6、续)数据库的并发控制(续)读读C=200读读C=100CC*2写回写回CROLLBACKC恢复为恢复为100读读B=100BB*2写回写回B=200读读A=50读读B=100求和求和=150读读A=50读读B=200和和=250(验算不对验算不对)读读A=16AA-1写回写回A=15读读A=16AA-1写回写回A=15T2T1T2T1T2T1(a)数据丢失数据丢失(b)不可重复读不可重复读(c)读读“脏脏”数据数据数数据据库库并并发发控控制制并并发操作操作带来的数据不一致性(来的数据不一致性(续)并并发操作操作带来的数据不一致性(来的数据不一致性(续)(1)丢失修改(失修改(lostupdat

7、e)丢失失修修改改是是指指事事务T1与与事事务T2从从数数据据库中中读入入同同一一数数据据并并修修改改,事事务T2的的提提交交结果果破破坏坏了了事事务T1提提交交的的结果,果,导致事致事务T1的修改被的修改被丢失。失。例例2:同:同时进行入行入库和出和出库操作任操作任务造成造成丢失修改。失修改。顺序序任任务操作操作库存量存量1T1读库存量存量502T2读库存量存量503T1库存量存量=50+1004T2库存量存量=50-405T1写写库存量存量1506T2写写库存量存量10数数据据库库并并发发控控制制(2)不可重复)不可重复读(non-repeatableread)不不可可重重复复读是是指指事

8、事务T1读取取数数据据后后,事事务T2执行行更更新操作,使事新操作,使事务T1无法再无法再现前一次前一次读取取结果。果。三三类不可重复不可重复读事事务T1读取取某某一一数数据据后后,事事务T2对其其做做了了修修改改,当当事事务T1再次再次读该数据数据时,得到与前一次不同的得到与前一次不同的值。事事务T1读取取某某些些数数据据记录后后,事事务T2删除除了了其其中中部部分分记录,当当事事务T1再再次次读取取数数据据时,发现某某些些记录消失了。消失了。事事务T1读取取某某些些数数据据记录后后,事事务T2插插入入了了一一些些记录,当当事事务T1再再次次读取取数数据据时,发现多多了了一一些些记录。幻幻影

9、影现现象象数数据据库库并并发发控控制制并发操作带来的数据不一致性(续)并发操作带来的数据不一致性(续)例例3:数数据据库库并并发发控控制制不可重复读(续)不可重复读(续)(3)读“脏”数据(数据(dirtyread)指指事事务T1修修改改某某一一数数据据,并并将将其其写写回回磁磁盘,事事务T2读取取同同一一数数据据后后,事事务T1由由于于某某种种原原因因被被撤撤消消,这时事事务T1已已修修改改过的的数数据据恢恢复复原原值,事事务T2读到到的的数数据据就就与与数数据据库中中的的数数据据不不一一致致,是是不不正正确确的的数数据据,又又称称为“脏”数据。数据。数数据据库库并并发发控控制制并发操作带来

10、的数据不一致性(续)并发操作带来的数据不一致性(续)例例4:顺序序任任务操作操作库存量存量A1T1读库存量存量502T1库存量存量=50+1003T1写写库存量存量1504T2读库存量存量1505T2库存量存量=150-406T1ROLLBACK507T2写写库存量存量110数数据据库库并并发发控控制制并发操作带来的数据不一致性(续)并发操作带来的数据不一致性(续)第八章第八章数据库并发控制数据库并发控制8.1数据数据库的并的并发问题8.2并并发控制方法控制方法8.3并并发调度的可串行性度的可串行性8.4两段两段锁协议8.5SQLServer的并的并发控制控制数数据据库库并并发发控控制制第二节

11、第二节并发控制方法并发控制方法封锁封锁封锁协议封锁协议封锁的粒度封锁的粒度活锁和死锁活锁和死锁数数据据库库并并发发控控制制第二节第二节并发控制方法并发控制方法并发控制并发控制当许多人试图同时修改数据库内的数据时,必当许多人试图同时修改数据库内的数据时,必须执行控制系统以使某个人所做的修改不会对须执行控制系统以使某个人所做的修改不会对其他人产生负面影响,这称为并发控制。其他人产生负面影响,这称为并发控制。并发控制理论的类型并发控制理论的类型悲观并发控制(锁定数据)悲观并发控制(锁定数据)乐观并发控制(不锁定数据)乐观并发控制(不锁定数据)封锁是实现并发控制的主要技术。封锁是实现并发控制的主要技术

12、。数数据据库库并并发发控控制制一、封锁一、封锁1、封、封锁的定的定义事事务T在在对某个数据某个数据对象(例如表、象(例如表、记录等)等)操作之前操作之前,先向系先向系统发出出请求,求,对其加其加锁。加。加锁后,事后,事务T对该数据数据对象有了一定的控制,象有了一定的控制,在事在事务T释放它的放它的锁之前之前,其它的事其它的事务不能更不能更新此数据新此数据对象。象。数数据据库库并并发发控控制制封锁(续)封锁(续)数数据据库库并并发发控控制制2、封、封锁的的类型型一个事一个事务对某个数据某个数据对象加象加锁后究竟后究竟拥有有什么什么样的控制是由的控制是由锁的的类型决定的。型决定的。基本的封基本的封

13、锁类型型共享共享锁(读锁,简记为S锁)互斥互斥锁(写(写锁、排他、排他锁,简记为X锁)意向意向锁(1)共享)共享锁共享共享锁又称又称为读锁(S锁)。)。若事若事务T对数据数据对象象A加上加上S锁,则事事务T可可以以读A但不能修改但不能修改A,其它事,其它事务只能再只能再对A加加S锁,而不能加,而不能加X锁,直到,直到T释放放A上的上的S锁。共享共享锁保保证了其它事了其它事务可以可以读A,但在,但在T释放放A上的上的S锁之前不能之前不能对A做任何修改。做任何修改。数数据据库库并并发发控控制制封锁(续)封锁(续)(2)互斥)互斥锁互斥互斥锁又称又称为写写锁、排他、排他锁(X锁)。)。若事若事务T对

14、数据数据对象象A加上加上X锁,则只允只允许T读取和修改取和修改A,其它任何事其它任何事务都不能再都不能再对A加任加任何何类型的型的锁,直到,直到T释放放A上的上的锁。排它排它锁保保证了其它事了其它事务在在T释放放A上的上的锁之前之前不能再不能再读取和修改取和修改A。数数据据库库并并发发控控制制封锁(续)封锁(续)(3)意向)意向锁如果如果对一个一个结点加意向点加意向锁,说明明该结点的下点的下层结点正在被加点正在被加锁;对任一任一结点加点加锁时,必,必须先先对其上其上层结点加意向点加意向锁。分分为以下以下类型:型:意向共享意向共享锁(IS)意向排它意向排它锁(IX)共享意向排它共享意向排它锁(S

15、IX)SIX=S+IX(对该对象加象加S锁,再加,再加IX锁)数数据据库库并并发发控控制制封锁(续)封锁(续)(4)共享锁和互斥锁的控制方式)共享锁和互斥锁的控制方式封锁类型的相容矩阵:封锁类型的相容矩阵:T2T1XSXNNYSNYYYYYY=Yes,相容的,相容的请求求N=No,不相容的,不相容的请求求表示事务表示事务T1已经获得的已经获得的数据对象上的锁的类型数据对象上的锁的类型表示事务表示事务T2对同一数据对同一数据对象发出的封锁请求。对象发出的封锁请求。数数据据库库并并发发控控制制封锁(续)封锁(续)例例5:两个事:两个事务T1和和T2T1:select*fromtableT2:sel

16、ect*fromtableT2不用等待不用等待T1执行完,而是可以行完,而是可以马上上执行。行。分析:分析:T1运行,运行,则table被加被加锁(lockA)T2运行,再运行,再对table加一个共享加一个共享锁(lockB)两个两个锁是可以同是可以同时存在于同一存在于同一资源上的,源上的,这意味意味着共享着共享锁不阻止其它事不阻止其它事务同同时读资源,但阻源,但阻止止其他事其他事务更新更新资源。源。共享锁和互斥锁的控制方式(续)共享锁和互斥锁的控制方式(续)共享锁和互斥锁的控制方式(续)共享锁和互斥锁的控制方式(续)例例6:两个事:两个事务T1和和T2T1:select*fromtable

17、(读取数据)取数据)T2:updatetablesetcolumn1=hello(修改数据)(修改数据)过程:程:T1运行运行(加共享(加共享锁)T2运行运行IfT1还没没执行完行完T2等等.Else锁被被释放放T2执行行EndIfT2在在执行行update前,前,试图对table表加一个互斥表加一个互斥锁,而数,而数据据库规定同一定同一资源上不能同源上不能同时共存共享共存共享锁和互斥和互斥锁。例例7:T1、T2、T3三个事三个事务T1:select*fromtableT2:select*fromtableT3:updatetablesetcolumn1=helloT2不用等不用等T1运行完就

18、能运行,运行完就能运行,T3却要等却要等T1和和T2都运行完才能运行。都运行完才能运行。因因为T3必必须等等T1和和T2的共享的共享锁全部全部释放才能放才能进行加互斥行加互斥锁然后然后执行行update。共享锁和互斥锁的控制方式(续)共享锁和互斥锁的控制方式(续)例例8:T1:BeginTranSelect*fromtable(holdlock)Updatetablesetcolumn1=helloT2:BegintranSelect*fromtable(holdlock)Updatetablesetcolumn1=world假假设T1和和T2同同时达到达到select,T1对table加共享

19、加共享锁,T2也也加共享加共享锁,当,当T1的的select执行完,准行完,准备执行行update时,必,必须等等table上的其它共享上的其它共享锁释放,所以因放,所以因T2的共享的共享锁不不释放而放而导致致T1等。同理,也因等。同理,也因为T1的共享的共享锁不不释放而放而导致致T2等。等。封锁(续)封锁(续)数数据据库库并并发发控控制制例例9:T1:BeginTranUpdatetablesetcolumn1=hellowhereid=10T2:BeginTranUpdatetablesetcolumn1=worldwhereid=20如果如果id是主是主键上面有索引,上面有索引,则T1和

20、和T2互不影响,互不影响,T2不不需要等待。需要等待。如果如果id是普通的一列,没有索引,是普通的一列,没有索引,则T2需要等待。需要等待。封锁(续)封锁(续)二、二、封锁协议封锁协议封封锁协议(LockingProtocol)在运用在运用X锁和和S锁对数据数据对象加象加锁时,需要,需要约定定一些一些规则,这些些规则称称为封封锁协议。何何时申申请X锁或或S锁持持锁时间何何时释放放对封封锁方式方式规定不同的定不同的规则,就形成了各种不,就形成了各种不同的封同的封锁协议。一一级封封锁协议二二级封封锁协议三三级封封锁协议数数据据库库并并发发控控制制封锁协议(续)封锁协议(续)1、一、一级封封锁协议事

21、事务T在在修改修改数据数据R之前必之前必须先先对其加其加X锁,直到事直到事务结束才束才释放。放。一一级封封锁协议可防止可防止丢失修改,失修改,并保并保证事事务T是是可恢复的。可恢复的。一一级封封锁协议中中,没有要求没有要求对读数据数据进行加行加锁,所以它不能保所以它不能保证可重复可重复读和不和不读“脏”数据。数据。数数据据库库并并发发控控制制一级封锁协议可以一级封锁协议可以防止丢失修改。防止丢失修改。数数据据库库并并发发控控制制一级封锁协议(续)一级封锁协议(续)例例10:一级封锁协议(续)一级封锁协议(续)一级封锁协议不一级封锁协议不能保证可重复读。能保证可重复读。例例11:读读A=15Xl

22、ockA获得获得读读A=16AA-1写回写回A=15UnlockAROLLBACKT2T1一级封锁协议不能防止读一级封锁协议不能防止读“脏脏”数据。数据。数数据据库库并并发发控控制制一级封锁协议(续)一级封锁协议(续)例例12:2、二、二级封封锁协议事事务T对要修改数据必要修改数据必须先加先加X锁,直到,直到事事务结束束才才释放放X锁;事;事务T在在读取数据取数据R之前必之前必须先先对其加其加S锁,读完后完后即可即可释放放S锁。二二级封封锁协议可以防止可以防止丢失修改和失修改和读“脏”数数据。据。数数据据库库并并发发控控制制封锁协议(续)封锁协议(续)二二级封封锁协议可以防可以防止止丢失修改和

23、失修改和读“脏”数据。数据。数数据据库库并并发发控控制制二级封锁协议(续)二级封锁协议(续)例例13:XlockB等待等待等待等待获得获得XlockB读读B=100BB*2写回写回B=200CommitUnlockBSlockA,B获得获得读读A=50读读B=100UnlockA,B求求A+B=150SlockA得到得到SlockB等待等待获得获得读读A=50读读B=200求和求和=250(验算不对验算不对)T2T1二级封锁协议不能二级封锁协议不能保证可重复读。保证可重复读。数数据据库库并并发发控控制制二级封锁协议(续)二级封锁协议(续)例例14:3、三、三级封封锁协议事事务T在在读取数据取数

24、据R之前必之前必须先先对其加其加S锁,在修改数据之前必在修改数据之前必须先加上先加上X锁,直到事,直到事务结束才束才释放所有放所有锁。三三级封封锁协议可防止可防止丢失修改、失修改、读脏数据和数据和不可重复不可重复读。数数据据库库并并发发控控制制封锁协议(续)封锁协议(续)三级封锁协议可以保三级封锁协议可以保证重复读。证重复读。数数据据库库并并发发控控制制例例15:4、不同、不同级别封封锁协议的区的区别X锁锁S锁锁操作结束操作结束释释放放事务结束事务结束释释放放操作结束操作结束释释放放事务结束事务结束释释放放一级封锁协议一级封锁协议二级封锁协议二级封锁协议三级封锁协议三级封锁协议不丢失不丢失修修

25、改改不读不读“脏脏”数数据据可重可重复读复读一致性保证一致性保证 数数据据库库并并发发控控制制封锁协议(续)封锁协议(续)三、三、封锁的粒度封锁的粒度X锁和和S锁都是加在某一个都是加在某一个数据数据对象象上的。上的。例:在关系数据例:在关系数据库中,封中,封锁对象可以是:象可以是:逻辑单元:元:属性属性值、属性、属性值集合、元集合、元组、关系、关系、索引索引项、整个索引、整个数据、整个索引、整个数据库等等物理物理单元:元:页(数据(数据页或索引或索引页)、)、块等等1、封、封锁粒度粒度(Granularity)封封锁对象的大小。象的大小。数数据据库库并并发发控控制制2、封、封锁粒度与系粒度与系

26、统的并的并发度和并度和并发控制的开控制的开销密密切相关。切相关。封封锁的粒度越大,系的粒度越大,系统中能中能够被封被封锁的的对象象就越少,并就越少,并发度也就越小,但同度也就越小,但同时系系统开开销也越小;也越小;封封锁的粒度越小,并的粒度越小,并发度越高,但系度越高,但系统开开销也就越大。也就越大。数数据据库库并并发发控控制制封锁的粒度(续)封锁的粒度(续)例例16:若封:若封锁粒度粒度为数据数据页,事,事务T1修改元修改元组L1。封锁的粒度(续)封锁的粒度(续)元元组L1元元组L2元元组L3事事务T1事事务T2修改修改L2数数据据库库并并发发控控制制数据页数据页例例17:若封:若封锁粒度粒

27、度为元元组,事,事务T1修改元修改元组L1。封锁的粒度(续)封锁的粒度(续)元元组L1元元组L2元元组L3事事务T1修改修改L1事事务T2修改修改L2数数据据库库并并发发控控制制数据页数据页例例18:若封:若封锁粒度粒度为元元组,事,事务T1修改数据修改数据页。封锁的粒度(续)封锁的粒度(续)元元组L1元元组L2元元组L3事事务T1事事务T1数数据据库库并并发发控控制制数据页数据页事事务T1系统开销和封锁粒度有关,也系统开销和封锁粒度有关,也与事务的操作对象有关。与事务的操作对象有关。封锁的粒度(续)封锁的粒度(续)3、多粒度封、多粒度封锁(multiplegranularitylocking

28、)在一个系在一个系统中同中同时支持多种封支持多种封锁粒度供不同粒度供不同的事的事务选择。(1)多粒度)多粒度树根根结点是整个数据点是整个数据库,叶,叶结点表示最小的数点表示最小的数据粒度。例:三据粒度。例:三级粒度粒度树。数数据据库库并并发发控控制制数据库数据库关系关系R1关系关系Rn元组元组元组元组元组元组元组元组元组元组多粒度封锁(续)多粒度封锁(续)(2 2)多粒度封锁协议)多粒度封锁协议 允许多粒度树中的每个结点被独立地加锁。允许多粒度树中的每个结点被独立地加锁。 对一个结点加锁意味着这个结点的所有后裔对一个结点加锁意味着这个结点的所有后裔结点也被加以同样类型的锁。结点也被加以同样类型

29、的锁。两种方式封锁两种方式封锁显示封锁:显示封锁:应事务要求直接加到数据对象上的封锁。应事务要求直接加到数据对象上的封锁。隐式封锁隐式封锁:该数据对象没有独立加锁,是由于其上级:该数据对象没有独立加锁,是由于其上级结点加锁而使该数据对象加上了锁。结点加锁而使该数据对象加上了锁。数数据据库库并并发发控控制制封锁的粒度(续)封锁的粒度(续)4、选择封封锁粒度需考粒度需考虑的因素的因素封锁开销封锁开销并发度并发度5、选择封封锁粒度的一般原粒度的一般原则需要处理大量元组的用户事务:以关系为封需要处理大量元组的用户事务:以关系为封锁单元;锁单元;需要处理多个关系的大量元组的用户事务:需要处理多个关系的大

30、量元组的用户事务:以数据库为封锁单位;以数据库为封锁单位;只处理少量元组的用户事务:以元组为封锁只处理少量元组的用户事务:以元组为封锁单位。单位。数数据据库库并并发发控控制制四、活锁和死锁四、活锁和死锁封封锁技技术带来的来的问题:活活锁死死锁1、活、活锁活活锁是一种是一种某个某个事事务长期等待的期等待的现象。象。事事务T1封封锁了数据了数据R,事,事务T2请求封求封锁R,于是等,于是等待;此待;此时事事务T3也申也申请封封锁R。当。当T1释放放R上的封上的封锁之后,之后,T3首先首先获准准,T2仍需等待。然后仍需等待。然后,事事务T4也申也申请封封锁R;当;当T3释放放R上的封上的封锁时,T4

31、首先首先获准准;如此下去如此下去,T2可能无限期地等待。可能无限期地等待。数数据据库库并并发发控控制制活锁(续)活锁(续)数数据据库库并并发发控控制制活锁(续)活锁(续)如何避免活锁如何避免活锁先来先服务先来先服务的策略:的策略:当当多多个个事事务务请请求求封封锁锁同同一一数数据据对对象象时时,封封锁锁子子系系统统按按请请求求封封锁锁的的先先后后次次序序对对这这些些事事务务排排队。队。该该数数据据对对象象上上的的锁锁一一旦旦释释放放,首首先先批批准准申申请请队列中第一个事务获得锁。队列中第一个事务获得锁。数数据据库库并并发发控控制制活锁和死锁(续)活锁和死锁(续)2、死、死锁死死锁是是两个或两

32、个以上两个或两个以上的事的事务之之间的循的循环等待。等待。如果事如果事务T1封封锁了数据了数据R1,T2封封锁了数据了数据R2;然后然后T1又又请求封求封锁R2,由于由于T2已封已封锁R2,T1必必须等待等待T2释放放R2上的上的锁。接着。接着,T2又申又申请封封锁R1,因因为T1已封已封锁R1,T2也只能等待也只能等待T1释放放R1上的上的锁。这样,就出,就出现了循了循环等等待待T1等待等待T2,而而T2等待等待T1。此。此时,两个事两个事务永永远不能不能结束,形成死束,形成死琐。数数据据库库并并发发控控制制死锁(续)死锁(续)XlockR1.XlockR2等待等待等待等待等待等待.Xloc

33、kR2.XlockR1等待等待等待等待.T1T2数数据据库库并并发发控控制制解决死锁的方法解决死锁的方法预防死锁发生;预防死锁发生;允许发生,定期诊断,若有死锁则解除。允许发生,定期诊断,若有死锁则解除。(1 1)死锁的预防)死锁的预防产生死锁的原因产生死锁的原因两个或多个事务都已封锁了一些数据对象,两个或多个事务都已封锁了一些数据对象,然后又都请求对已被其他事务封锁的数据对然后又都请求对已被其他事务封锁的数据对象加锁,从而出现死等待。象加锁,从而出现死等待。预防死锁的发生是要预防死锁的发生是要破坏产生死锁的条件。破坏产生死锁的条件。预防死锁的方法预防死锁的方法一次封锁法一次封锁法顺序封锁法顺

34、序封锁法数数据据库库并并发发控控制制死锁(续)死锁(续)一次封锁法一次封锁法一次封锁法要求每个事务必须一次将所有要使一次封锁法要求每个事务必须一次将所有要使用的数据用的数据全部加锁,全部加锁,否则就不能继续执行。否则就不能继续执行。一次封锁法存在的问题:降低并发度。一次封锁法存在的问题:降低并发度。扩大封锁范围扩大封锁范围难于事先精确确定封锁对象难于事先精确确定封锁对象数数据据库库并并发发控控制制死锁的预防(续)死锁的预防(续)顺序封锁法(时标法)顺序封锁法(时标法)预先对数据对象规定一个封锁顺序,所有事务预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。都按这个顺序实行封锁。顺序

35、封锁法存在的问题顺序封锁法存在的问题维护多样且多变的资源的封锁顺序成本高维护多样且多变的资源的封锁顺序成本高难于实现难于实现数数据据库库并并发发控控制制死锁的预防(续)死锁的预防(续)(2 2)死锁的诊断与解除)死锁的诊断与解除DBMS在解决死锁的问题上更普遍采用的是在解决死锁的问题上更普遍采用的是诊断并解除死锁的方法。诊断并解除死锁的方法。基本思想基本思想由由DBMS的并的并发控制子系控制子系统定期定期检测系系统中中是否存在死是否存在死锁,一旦,一旦检测到死到死锁,就要,就要设法法解除。解除。数数据据库库并并发发控控制制死锁的预防(续)死锁的预防(续) 死锁的诊断与解除(续)死锁的诊断与解除

36、(续) 超超时法法 每个事每个事务设定一个等待定一个等待时限,如果一个事限,如果一个事务的等待的等待时间超超过了了规定的定的时限,就限,就认为发生了死生了死锁。优点:点:实现简单;缺点缺点有可能有可能误判死判死锁;时限若限若设置得太置得太长,死,死锁发生后不能及生后不能及时发现。数数据据库库并并发发控控制制死锁的诊断与解除(续)死锁的诊断与解除(续)等待图法等待图法事事务等待等待图是一个有向是一个有向图G=(T,U)。其中其中: T为结点的集合点的集合,每个每个结点表示正运行的事点表示正运行的事务;U为边的集合,每条的集合,每条边表示事表示事务等待的情况。若等待的情况。若T1等待等待T2则有一

37、条从有一条从T1指向指向T2的有向的有向边。并并发控制子系控制子系统周期性地周期性地(比如每隔比如每隔1min)检测事事务等待等待图,如果如果发现图中存在中存在回路,回路,则表示系表示系统中出中出现了死了死锁。数数据据库库并并发发控控制制死锁的诊断与解除(续)死锁的诊断与解除(续)解除死锁解除死锁解除死锁的基本方法:解除死锁的基本方法:选择一个或多个处于死锁状态的事务,将其选择一个或多个处于死锁状态的事务,将其撤消,释放它们持有的锁,使其它事务能继撤消,释放它们持有的锁,使其它事务能继续运行下去。续运行下去。注意:被撤消的事务对数据的修改必须加以注意:被撤消的事务对数据的修改必须加以恢复。恢复

38、。为了降低处理死锁的代价,通常为了降低处理死锁的代价,通常选取处理死选取处理死锁代价最小的事务。锁代价最小的事务。数数据据库库并并发发控控制制第八章第八章数据库并发控制数据库并发控制8.1数据数据库的并的并发问题8.2并并发控制方法控制方法8.3并并发调度的可串行性度的可串行性8.4两段两段锁协议8.5SQLServer的并的并发控制控制数数据据库库并并发发控控制制第三节第三节 并发调度的可串行性并发调度的可串行性计算机系统对并发事务中并发操作的调度是随计算机系统对并发事务中并发操作的调度是随机的,而不同的调度可能会产生不同的结果。机的,而不同的调度可能会产生不同的结果。事务的串行调度一定是正

39、确的。事务的串行调度一定是正确的。例例19:现在有两个事在有两个事务,分分别包含下列操作:包含下列操作:事事务T1:读B;A=B+1;写回;写回A;事事务T2:读A;B=A+1;写回;写回B;假假设A的初的初值为2,B的初的初值为2。串行串行调度度1调度次序度次序:T1,T2串行串行调度度2调度次序度次序:T2,T1数数据据库库并并发发控控制制SlockBY=R(B)=2UnlockBXlockAA=Y+1W(A)=3UnlockA SlockAX=R(A)=3UnlockAXlockBB=X+1W(B)=4UnlockB T1T2串行调度串行调度1数数据据库库并并发发控控制制并发调度的可串行

40、性(续)并发调度的可串行性(续)结果:果:A=3B=4SlockBY=R(B)=3UnlockBXlockAA=Y+1W(A)=4UnlockASlockAX=R(A)=2UnlockAXlockBB=X+1W(B)=3UnlockBT1T2数数据据库库并并发发控控制制并发调度的可串行性(续)并发调度的可串行性(续)串行调度串行调度2结果:果:A=4B=3SlockBY=R(B)=2UnlockBXlockAA=Y+1W(A)=3UnlockASlockAX=R(A)=2UnlockAXlockBB=X+1W(B)=3UnlockBT1T2调度调度3数数据据库库并并发发控控制制并发调度的可串行

41、性(续)并发调度的可串行性(续)结果:果:A=3B=3执行结果与串行调执行结果与串行调度度1,2都不相同都不相同SlockBY=R(B)=2UnlockBXlockAA=Y+1W(A)=3UnlockASlockA等待等待等待等待等待等待X=R(A)=3UnlockAXlockBB=X+1W(B)=4UnlockBT1T2执行结果与串行调执行结果与串行调度度1相同相同数数据据库库并并发发控控制制并发调度的可串行性(续)并发调度的可串行性(续)调度调度4结果:果:A=3B=4一、可串行化调度一、可串行化调度定定义:可串行化:可串行化调度度多个事多个事务的并行的并行执行是正确的,当且行是正确的,当

42、且仅当当其其结果与按某一次序果与按某一次序串行串行地地执行它行它们时的的结果果相同,称相同,称这种种调度策略度策略为可串行化的可串行化的调度。度。可串行性是并可串行性是并发事事务正确正确调度的准度的准则。给定一个并定一个并发调度,当且度,当且仅当它是可串行化当它是可串行化的,才的,才认为是正确的是正确的调度。度。数数据据库库并并发发控控制制例例19(续)调度度1:串行:串行调度度调度度2:串行:串行调度度调度度3:不可串行化的:不可串行化的调度度调度度4:可串行化:可串行化调度度可串行化调度(续)可串行化调度(续)数数据据库库并并发发控控制制l具有什么性质的调度是可串行化调度呢?具有什么性质的

43、调度是可串行化调度呢?l如何判断调度是可串行化调度呢?如何判断调度是可串行化调度呢?1、冲突操作、冲突操作指不同的事指不同的事务对同一个数据的同一个数据的读写操作和写写操作和写写操作:写操作:Ri(x)与与Wj(x)事事务Ti读x,Tj写写xWi(x)与与Wj(x)事事务Ti写写x,Tj写写x其他操作是不冲突操作。其他操作是不冲突操作。不同事不同事务的冲突操作的冲突操作和同一事和同一事务的两个操作是的两个操作是不能交不能交换的的。二、冲突可串行化调度二、冲突可串行化调度数数据据库库并并发发控控制制2、冲突可串行化、冲突可串行化调度度一个一个调度度Sc在保在保证冲突操作的次序不冲突操作的次序不变

44、的的情况下,通情况下,通过交交换两个事两个事务不冲突操作的次序不冲突操作的次序得到另一个得到另一个调度度Sc,如果,如果Sc是串行的,称是串行的,称调度度Sc为冲突可串行化的冲突可串行化的调度。度。一个一个调度是冲突可串行化,一定是可串行化度是冲突可串行化,一定是可串行化的的调度。度。冲突可串行化调度(续)冲突可串行化调度(续)数数据据库库并并发发控控制制例例20调度度Sc1=r1(A)w1(A)r2(A)w2(A)r1(B)w1(B)r2(B)w2(B)把把w2(A)与与r1(B)w1(B)交交换,得到:,得到:r1(A)w1(A)r2(A)r1(B)w1(B)w2(A)r2(B)w2(B)

45、再把再把r2(A)与与r1(B)w1(B)交交换:Sc2=r1(A)w1(A)r1(B)w1(B)r2(A)w2(A)r2(B)w2(B)Sc2等价于一个串行等价于一个串行调度,所以度,所以Sc1是冲突可是冲突可串行化的串行化的调度。度。冲突可串行化调度(续)冲突可串行化调度(续)数数据据库库并并发发控控制制冲突可串行化调度(续)冲突可串行化调度(续)数数据据库库并并发发控控制制Sc1Sc2r1(A)w1(A)r2(A)w2(A)r1(B)w1(B)r2(B)w2(B)T1T2r1(A)w1(A)r2(A)r1(B)w1(B)w2(A)r2(B)w2(B)T1T2r1(A)w1(A)r1(B)

46、w1(B)r2(A)w2(A)r2(B)w2(B)T1T2冲突可串行化冲突可串行化调度是可串行化度是可串行化调度的充分条度的充分条件,不是必要条件。件,不是必要条件。例例21有三个事有三个事务:T1=W1(Y)W1(X)T2=W2(Y)W2(X)T3=W3(X)调度度L1=W1(Y)W1(X)W2(Y)W2(X)W3(X)调度度L2=W1(Y)W2(Y)W2(X)W1(X)W3(X)调度度L2不不满足冲突可串行化,但是足冲突可串行化,但是调度度L2是是可串行化的,因可串行化的,因为执行行结果与果与调度度L1相同。相同。冲突可串行化调度(续)冲突可串行化调度(续)数数据据库库并并发发控控制制冲突

47、可串行化调度(续)冲突可串行化调度(续)数数据据库库并并发发控控制制T1T2W1(Y)W1(X)W2(Y)W2(X)W3(X)T3T1T2W1(Y)W2(Y)W2(X)W1(X)W3(X)T3调度度L1调度度L2例例21(续):):调度度L2执行的行的结果和果和调度度L1是相同的。是相同的。第八章第八章数据库并发控制数据库并发控制8.1数据数据库的并的并发问题8.2并并发控制方法控制方法8.3并并发调度的可串行性度的可串行性8.4两段两段锁协议8.5SQLServer的并的并发控制控制数数据据库库并并发发控控制制第四节第四节两段锁协议两段锁协议可串行性是并行可串行性是并行调度正确性的度正确性的

48、唯一准唯一准则,两两段段锁(2PL)协议就是就是为保保证并行并行调度可串行性度可串行性而提供的封而提供的封锁协议。1、两段、两段锁协议的内容的内容所有事所有事务必必须分两个分两个阶段段对数据数据项加加锁和解和解锁。在在对任何数据任何数据进行行读、写操作之前,事、写操作之前,事务首先首先要申要申请并并获得得对该数据的封数据的封锁;在在释放一个封放一个封锁之后,事之后,事务不再申不再申请和和获得任得任何其他封何其他封锁。数数据据库库并并发发控控制制两段锁协议(续)两段锁协议(续)(1)“两段两段”锁的含的含义事事务分分为两个两个阶段:段:第一第一阶段是段是获得封得封锁,也称,也称为扩展展阶段;段;

49、第二第二阶段是段是释放封放封锁,也称,也称为收收缩阶段。段。例如例如,事,事务1的封的封锁序列序列满足足2PL协议:SlockASlockBXlockCUnlockBUnlockAUnlockC事事务2的封的封锁序列不序列不满足足2PL协议:SlockAUnlockASlockBXlockCUnlockCUnlockB数数据据库库并并发发控控制制扩展阶段扩展阶段收缩阶段收缩阶段两段锁协议(续)两段锁协议(续)(2)两段)两段锁协议是可串行化的充分条件是可串行化的充分条件若并发执行的所有事务均遵守两段锁协议,若并发执行的所有事务均遵守两段锁协议,则对这些事务的所有并发调度策略都是可串行化则对这些

50、事务的所有并发调度策略都是可串行化的。的。所有遵守两段锁协议的事务,其并行执行所有遵守两段锁协议的事务,其并行执行的结果一定是正确的。的结果一定是正确的。遵循两段锁协议是并发执行结果正确的充遵循两段锁协议是并发执行结果正确的充分条件而非必要条件。分条件而非必要条件。数数据据库库并并发发控控制制T2SlockA等待等待等待等待等待等待等待等待等待等待SlockA读读A=3Y=AXlockBB=Y+1写回写回B=4UnlockBUnlockAT1SlockB读读B=2Y=BUnlockBXlockAA=Y+1写回写回A=3UnlockAT2SlockA等待等待等待等待等待等待等待等待等待等待Slo

51、ckA读读A=3X=AUnlockAXlockBB=X+1写回写回B=4UnlockB遵守两段锁协议遵守两段锁协议可串行可串行不遵守两段锁协议不遵守两段锁协议可串行可串行T1SlockB读读B=2Y=BUnlockBXlockAA=Y+1写回写回A=3UnlockAT2SlockA读读A=2X=AUnlockAXlockB等待等待XlockBB=X+1写回写回B=3UnlockB不遵守两段锁协议不遵守两段锁协议不可串行不可串行T1SlockB读读B=2Y=BXlockAA=Y+1写回写回A=3UnlockBUnlockA数数据据库库并并发发控控制制两段锁协议(续)两段锁协议(续)A=3B=4A

52、=3B=4A=3B=3两段锁协议(续)两段锁协议(续)2、两段、两段锁协议与防止死与防止死锁的一次封的一次封锁法法一次封一次封锁法要求每个事法要求每个事务必必须一次将所有要一次将所有要使用的数据全部加使用的数据全部加锁,否,否则不能不能继续执行,行,因此因此一次封一次封锁法遵守两段法遵守两段锁协议。但是两段但是两段锁协议并不要求事并不要求事务必必须一次将所一次将所有要使用的数据全部加有要使用的数据全部加锁,因此,因此遵守两段遵守两段锁协议的事的事务可能可能发生死生死锁。数数据据库库并并发发控控制制两段锁协议(续)两段锁协议(续)遵守两段锁协议的事务发生死锁遵守两段锁协议的事务发生死锁T1Slo

53、ckB读读B=2XlockA等待等待等待等待T2SlockA读读A=2XlockB等待等待数数据据库库并并发发控控制制第八章第八章数据库并发控制数据库并发控制8.1数据数据库的并的并发问题8.2并并发控制方法控制方法8.3并并发调度的可串行性度的可串行性8.4两段两段锁协议8.5SQLServer的并的并发控制控制数数据据库库并并发发控控制制一、并一、并发控制模式控制模式SQLSERVER提供了悲提供了悲观并并发控制模式和控制模式和乐观并并发控制模式。控制模式。悲观并发控制:悲观并发控制:一个锁定系统,可以阻止用户以一个锁定系统,可以阻止用户以影响其他用户的方式修改数据。影响其他用户的方式修改

54、数据。乐观并发控制:乐观并发控制:用户读取数据时不锁定数据。它用户读取数据时不锁定数据。它默认行为是采用行版本控制使数据读者能够看到默认行为是采用行版本控制使数据读者能够看到修改操作发生以前的数据状态。修改操作发生以前的数据状态。数数据据库库并并发发控控制制事事务指定一个隔离指定一个隔离级别,该隔离隔离级别定定义一一个事个事务必必须与其他事与其他事务所所进行的行的资源或数据更改源或数据更改相隔离的程度。事相隔离的程度。事务隔离隔离级别控制:控制:是否在读数据的时候使用锁及使用何种锁是否在读数据的时候使用锁及使用何种锁读锁持续多长时间读锁持续多长时间读操作希望读已经被其他事务排他锁锁住的数据读操

55、作希望读已经被其他事务排他锁锁住的数据时,是否可以:时,是否可以:一直等到其他事务释放锁一直等到其他事务释放锁读没有提交的数据读没有提交的数据读数据最后提交后的版本读数据最后提交后的版本二、二、SQLSERVER2005的事的事务隔离隔离级别数数据据库库并并发发控控制制SQL-99标准提供四种事准提供四种事务隔离隔离级别,SQLServerDataBaseEngine支持所有支持所有这些隔离些隔离级别:未提交未提交读(ReadUncommitted)已提交已提交读(ReadCommitted)可重复可重复读(RepeatableRead)可序列化可序列化(Serializable)SQLSER

56、VER2005的事的事务隔离隔离级别(续)数数据据库库并并发发控控制制1、未提交、未提交读(ReadUncommitted)在读数据时不会检查或使用任何锁。在这种隔离级在读数据时不会检查或使用任何锁。在这种隔离级别中可能读取到没有提交的数据。别中可能读取到没有提交的数据。例:用例:用户B:BEGINTRANUPDATEtestSETage=25WHEREname=AA用用户A:SETTRANSACTIONISOLATIONLEVELREADUNCOMMITTEDSELECT*FROMtest用用户B:ROLLBACKSQLSERVER2005的事的事务隔离隔离级别(续)数数据据库库并并发发控控

57、制制用用户A读到到AA的年的年龄为25岁,该数据数据为脏数据。数据。2、已提交、已提交读(读(ReadCommitted)只读取提交的数据并等待其他事务释放排他锁。读数只读取提交的数据并等待其他事务释放排他锁。读数据的共享锁在读操作完成后立即释放。据的共享锁在读操作完成后立即释放。例:用例:用户B:BEGINTRANUPDATEtestSETage=25WHEREname=AA用用户A:SETTRANSACTIONISOLATIONLEVELREADCOMMITTEDSELECT*FROMtest用用户A此此时将会将会查不到数据,不到数据,显示示查询等待中,直到用等待中,直到用户B进行了行了R

58、OLLBACK或者或者COMMIT操作后,此操作后,此查询语句才会生效。句才会生效。SQLSERVER2005的事的事务隔离隔离级别(续)数数据据库库并并发发控控制制3、可重复、可重复读(RepeatableRead)像像“已提交读已提交读”级别那样读数据,但会保持共享锁直级别那样读数据,但会保持共享锁直到事务结束。到事务结束。例:用例:用户A:select*fromtestwherename=AA用用户B:updatetestsetage=25wherename=AA用用户A:select*fromtestwherename=AAA两次两次读到的数据不一到的数据不一样,称之,称之为不可重复不

59、可重复读。SQLSERVER2005的事的事务隔离隔离级别(续)数数据据库库并并发发控控制制不可重复不可重复读解决解决办法:法:在用在用户A的事的事务运行之前,先运行之前,先设定定SQL的隔离等的隔离等级为REPEATABLEREADSQL语句句为SETTRANSACTIONISOLATIONLEVELREPEATABLEREAD这样在第一步用在第一步用户A查询完之后,用完之后,用户B将无法更新用将无法更新用户A所所查询到的数据集中的任何数据,直到用到的数据集中的任何数据,直到用户A事事务结束束才可以才可以进行更新,行更新,这样就有效的防止了用就有效的防止了用户在同一个事在同一个事务中中读取到

60、不一致的数据。取到不一致的数据。SQLSERVER2005的事的事务隔离隔离级别(续)数数据据库库并并发发控控制制4、序列化、序列化(Serializable)提供严格的事务隔离。要求事务序列化执行,事务提供严格的事务隔离。要求事务序列化执行,事务只能一个接着一个地执行,但不能并发执行。只能一个接着一个地执行,但不能并发执行。例:用例:用户A查询test表中的所有表中的所有记录;用用户B在自己的事在自己的事务中向中向test表插入(或表插入(或删除)了的除)了的一条一条记录并提交事并提交事务;用用户A再去再去执行前面的行前面的查询整整张表表记录的操作,的操作,结果会多出(少了)一条果会多出(少

61、了)一条记录,此操作称之,此操作称之为幻象。幻象。SQLSERVER2005的事的事务隔离隔离级别(续)数数据据库库并并发发控控制制幻影幻影问题的解决的解决办法:法:在用在用户A的事的事务运行之前,先运行之前,先设定定SQL的隔离等的隔离等级为SERIALIZABLESETTRANSACTIONISOLATIONLEVELSERIALIZABLE在用在用户A的事的事务执行行过程中,程中,别的用的用户都将无法都将无法对任何任何数据数据进行更新、插入和行更新、插入和删除的操作,直到用除的操作,直到用户A的事的事务回回滚或者提交或者提交为止。止。这是四个隔离是四个隔离级别中限制最大的中限制最大的级别

62、。因。因为并并发级别较低,所以低,所以应只在必要只在必要时才使用才使用该选项。SQLSERVER2005的事的事务隔离隔离级别(续)数数据据库库并并发发控控制制5、行版本控制、行版本控制当启用基于行版本控制的隔离当启用基于行版本控制的隔离级别时,数据,数据库引擎引擎将将维护修改的每一行的版本。修改的每一行的版本。应用程序可以指定事用程序可以指定事务使用使用行版本行版本查看事看事务或或查询开始开始时存在的数据,而不是使用存在的数据,而不是使用锁保保护所有所有读取。取。两个事两个事务隔离隔离级别:已提交已提交读隔离(隔离(Read_Committed_Snapshot)快照隔离(快照隔离(Allo

63、w_Snapshot_Isolation)数数据据库库并并发发控控制制SQLSERVER2005的事的事务隔离隔离级别(续)隔离级别及其作用隔离级别及其作用SQLSERVER2005的事的事务隔离隔离级别(续)数数据据库库并并发发控控制制三、三、查看看SQLServer2005中的中的锁使用使用SQLServerManagementStudio浏览数数据据库库并并发发控控制制查看看SQLServer2005中的中的锁(续)数数据据库库并并发发控控制制本章小结本章小结数据库的并发控制以事务为单位。数据库的并发控制以事务为单位。数据库的并发控制通常使用封锁机制。数据库的并发控制通常使用封锁机制。两类最常用的封锁两类最常用的封锁不同级别的封锁协议提供不同的数据一致性保不同级别的封锁协议提供不同的数据一致性保证,提供不同的数据共享度。证,提供不同的数据共享度。三级封锁协议三级封锁协议对数据对象施加封锁,会带来活锁和死锁问题对数据对象施加封锁,会带来活锁和死锁问题活锁活锁死锁死锁数数据据库库并并发发控控制制

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号