数据库第11章并发控制.ppt
《数据库第11章并发控制.ppt》由会员分享,可在线阅读,更多相关《数据库第11章并发控制.ppt(77页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2022/12/30兰彬制作1第十一章第十一章 并发控制并发控制11.1并发控制概述并发控制概述11.2封锁封锁11.3封锁协议封锁协议11.4活锁和死锁活锁和死锁11.5并发调度的可串行性并发调度的可串行性11.6两段锁协议两段锁协议2022/12/30兰彬制作2并发控制概述并发控制概述多个事务执行方式主要有多个事务执行方式主要有2种:种:(1)事务串行执行)事务串行执行每每个个时时刻刻只只有有一一个个事事务务运运行行,其其他他事事务务必须等到这个事务结束以后方能运行必须等到这个事务结束以后方能运行不不能能充充分分利利用用系系统统资资源源,不不能能发发挥挥数数据据库共享资源的特点库共享资源的
2、特点2022/12/30兰彬制作3并发控制(续)并发控制(续)(2)事务并行(并发)执行)事务并行(并发)执行l单处理机系统中:单处理机系统中:交叉并发方式交叉并发方式所有并行事务的并行操作所有并行事务的并行操作轮流交叉运行轮流交叉运行能能够够减减少少处处理理机机的的空空闲闲时时间间,提提高高系系统统的的效率效率2022/12/30兰彬制作4并发控制(续)并发控制(续)(2)事务并行(并发)执行)事务并行(并发)执行l多处理机系统中:多处理机系统中:同时并发方式同时并发方式每每个个处处理理机机都都可可以以运运行行一一个个事事务务,多多个个处处理理机机可可以以同同时时运运行行多多个个事事务务,实
3、实现现多多个个事事务真正的并行运行务真正的并行运行最理想的并发方式,但受制于硬件环境最理想的并发方式,但受制于硬件环境2022/12/30兰彬制作5事务并发执行带来的问题事务并发执行带来的问题l可可能能会会存存取取和和存存储储不不正正确确的的数数据据,破破坏坏事事务务的隔离性和数据库的一致性的隔离性和数据库的一致性lDBMS必须提供并发控制机制必须提供并发控制机制l并并发发控控制制机机制制是是衡衡量量一一个个DBMS性性能能的的重重要要标志之一标志之一2022/12/30兰彬制作611.1 11.1 并发控制概述并发控制概述l并发控制机制的任务并发控制机制的任务对多个事务的并发操作进行正确调度
4、对多个事务的并发操作进行正确调度保证事务的隔离性保证事务的隔离性保证数据库的一致性保证数据库的一致性2022/12/30兰彬制作7T1的修改被的修改被T2覆盖了,数据库覆盖了,数据库中数据出现错误中数据出现错误读读A=20AA-1写回写回A=19读读A=20AA-1写回写回A=19事务事务T2事务事务T1数据不一致实例:飞机订票系统数据不一致实例:飞机订票系统2022/12/30兰彬制作8并发操作带来的数据不一致性并发操作带来的数据不一致性l丢失修改(丢失修改(lostupdate)l不可重复读(不可重复读(non-repeatableread)l读读“脏脏”数据(数据(dirtyread)数
5、据库的并发操作通常会带来数据库的并发操作通常会带来3个问题:个问题:2022/12/30兰彬制作91.丢失修改丢失修改l事务事务1与事务与事务2从数据库中读出同一数据从数据库中读出同一数据并修改,事务并修改,事务2的提交结果破坏了事务的提交结果破坏了事务1提交的结果,导致事务提交的结果,导致事务1的修改被丢失。的修改被丢失。2022/12/30兰彬制作10读读A=20AA-1写回写回A=19读读A=20AA-1写回写回A=19事务事务T2事务事务T1(a)丢失修改丢失修改图图11.1三种数据不一致性三种数据不一致性2022/12/30兰彬制作112.不可重复读不可重复读l事务事务1读取数据后,
6、事务读取数据后,事务2执行更新操作,执行更新操作,使事务使事务1无法再现前一次读取结果。无法再现前一次读取结果。2022/12/30兰彬制作12图图11.1三种数据不一致性三种数据不一致性(续续)读读B=100BB*2写回写回B=200读读A=50读读B=100求求和和=150读读A=50读读B=200求求和和=250(验算不对验算不对)T2T1(b)不可重复读不可重复读2022/12/30兰彬制作13不可重复读的不可重复读的3种情况种情况1.事务事务1读取某些数据后,读取某些数据后,事务事务2对其做了修改对其做了修改,当事务当事务1再次读该数据时,得到与前一次不同再次读该数据时,得到与前一次
7、不同的值的值2.事务事务1按照一定的条件,从数据库中读取了某按照一定的条件,从数据库中读取了某些数据记录后,些数据记录后,事务事务2删除了其中部分记录删除了其中部分记录,当事务当事务1再次读取数据时,发现某些记录神密再次读取数据时,发现某些记录神密地消失了。地消失了。2022/12/30兰彬制作14不可重复读的不可重复读的3种情况种情况3.事务事务1按照一定的条件,从数据库中读取了某按照一定的条件,从数据库中读取了某些数据记录后,些数据记录后,事务事务2插入了一些记录插入了一些记录,当事,当事务务1再次按相同条件读取数据时,发现多了一再次按相同条件读取数据时,发现多了一些记录。些记录。后两种不
8、可重复读有时也称为后两种不可重复读有时也称为幻影现象幻影现象2022/12/30兰彬制作153.读读“脏脏”数据数据l事务事务1修改修改某一数据,并将其某一数据,并将其写回写回磁盘上的磁盘上的数数据库据库中。中。l这样,事务这样,事务2读到的数据就与数据库中的数据读到的数据就与数据库中的数据不一致,是不正确的数据,又称为不一致,是不正确的数据,又称为“脏脏”数据数据。l事务事务2读取读取同一数据同一数据(被事务被事务1修改后的数据修改后的数据)后,后,事务事务1由于某种原因由于某种原因被撤消被撤消,这时事务,这时事务1已已修改过的数据恢复原值修改过的数据恢复原值2022/12/30兰彬制作16
9、图图11.1三种数据不一致性三种数据不一致性(续续)读读C=200读读C=100CC*2写回写回C=200ROLLBACKC恢复为恢复为100T2T1(c)读读“脏脏”数据数据2022/12/30兰彬制作1711.2封锁封锁l什么是封锁什么是封锁l封锁封锁是实现是实现并发控制并发控制的一个非常重要的技术。的一个非常重要的技术。封锁就是:事务封锁就是:事务T在对某个数据对象(例如在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,表、记录等)操作之前,先向系统发出请求,对其加锁;对其加锁;加锁后事务加锁后事务T就对该数据对象有了一定的控就对该数据对象有了一定的控制,在制,在事务事务T释
10、放它的锁之前释放它的锁之前,其它的事务其它的事务不能更新此数据对象不能更新此数据对象。2022/12/30兰彬制作18基本的封锁类型基本的封锁类型lDBMS通常提供了多种类型的封锁。一个事务通常提供了多种类型的封锁。一个事务对某个数据对象加锁后究竟拥有什么样的控制对某个数据对象加锁后究竟拥有什么样的控制是由封锁的类型决定的。是由封锁的类型决定的。l基本封锁类型基本封锁类型排它锁排它锁(eXclusivelock,简记为,简记为X锁锁)共享锁共享锁(Sharelock,简记为,简记为S锁锁)2022/12/30兰彬制作19封锁的封锁的2种类型种类型l排它锁排它锁写锁,写锁,X锁锁若事务若事务T对
11、数据对象对数据对象A加上加上S锁,则其它事锁,则其它事务务只能再对只能再对A加加S锁锁,而,而不能加不能加X锁锁,直到,直到T释放释放A上的上的S锁。锁。若事务若事务T对数据对象对数据对象A加上加上X锁,则只允许锁,则只允许T读取读取和和修改修改A,其它,其它任何事务都不能再对任何事务都不能再对A加加任何类型任何类型的锁的锁,直到,直到T释放释放A上的锁。上的锁。l共享锁共享锁读锁,读锁,S锁锁2022/12/30兰彬制作20封锁的相容矩阵封锁的相容矩阵Y=Yes,相容的请求,相容的请求N=No,不相容的请求,不相容的请求T2T1XS-XNNYSNYY-YYY2022/12/30兰彬制作211
12、1.3封锁协议封锁协议l在运用在运用X锁和锁和S锁对数据对象加锁时,需要约定锁对数据对象加锁时,需要约定一些规则:一些规则:封锁协议(封锁协议(LockingProtocol)l常用的封锁协议:常用的封锁协议:三级封锁协议三级封锁协议何时申请何时申请X锁或锁或S锁锁持锁时间持锁时间何时释放何时释放X锁或锁或S锁锁2022/12/30兰彬制作221.一级封锁协议一级封锁协议l事务事务T在在修改修改数据数据R之前必须先对其之前必须先对其加加X锁锁,直,直到该到该事务结束事务结束才释放才释放正常结束正常结束(COMMIT)非正常结束非正常结束(ROLLBACK)l一级封锁协议可一级封锁协议可防止丢失
13、修改防止丢失修改l在一级封锁协议中,如果只是读数据,不需要在一级封锁协议中,如果只是读数据,不需要加锁的,所以它加锁的,所以它不能保证不能保证可重复读可重复读和和不读不读“脏脏”数据数据。2022/12/30兰彬制作23T1T2XlockA获得获得读读A=16AA-1,写回写回A=15Commit,UnlockAXlockA等待等待等待等待获得获得XlockA读读A=15AA-1,写回,写回A=14Commit,UnlockA一级封锁协议:一级封锁协议:没有丢失修改没有丢失修改 2022/12/30兰彬制作24一级封锁协议:一级封锁协议:读读“脏脏”数据数据T1T2XlockA获得获得读读A=
14、16AA-1写回写回A=15RollbackUnlockA读读A=152022/12/30兰彬制作25一级封锁协议:一级封锁协议:不可重复读不可重复读T1T2读读A=50,读读B=100求和求和=150读读A=50,读读B=200求和求和=250(验算不对)(验算不对)XlockB,获得获得读读B=100BB*2,写回写回B=200Commit,UnlockB2022/12/30兰彬制作262.二级封锁协议二级封锁协议l二级封锁协议:二级封锁协议:l二级封锁协议可以二级封锁协议可以防止防止丢失修改丢失修改和和读读“脏脏”数据数据。一级封锁协议一级封锁协议+事务事务T在在读取读取数据数据R前必须
15、前必须先先加加S锁锁,读完后即可释放读完后即可释放S锁锁l在二级封锁协议中,由于读完数据后即可释放在二级封锁协议中,由于读完数据后即可释放S锁,所以它锁,所以它不能保证不能保证可重复读可重复读。2022/12/30兰彬制作27二级封锁协议:二级封锁协议:不读不读“脏脏”数据数据T1T2XlockC,读,读C=100CC*2,写回,写回C=200ROLLBACK(C恢复为恢复为100)UnlockCSlockC,等待等待等待等待等待等待等待等待获得获得SlockC,读,读C=100CommitC,UnlockC2022/12/30兰彬制作283.三级封锁协议三级封锁协议l三级封锁协议:三级封锁协
16、议:l三级封锁协议可三级封锁协议可防止防止丢失修改丢失修改、读脏数据读脏数据和和不不可重复读可重复读。一级封锁协议一级封锁协议+事务事务T在在读取读取数据数据R之前必须之前必须先对其先对其加加S锁锁,直到,直到事务结束事务结束才释放才释放S锁锁2022/12/30兰彬制作29三级封锁协议:三级封锁协议:可重复读可重复读T1T2SlockA,读,读A=50SlockB,读,读B=100,求和,求和=150读读A=50,读读B=100,求和求和=150CommitUnlockA,UnlockBXlockB等待等待等待等待等待等待等待等待获得获得XlockB读读B=100,BB*2写回写回B=200
17、Commit,UnlockB2022/12/30兰彬制作30表表11.1不同级别的封锁协议不同级别的封锁协议X锁锁S锁锁一致性保证一致性保证操作操作结束结束释放释放事务事务结束结束释放释放操作操作结束结束释放释放事务事务结束结束释放释放不丢失不丢失修修改改不读脏不读脏数数据据可重可重复读复读一级封一级封锁协议锁协议 二级封二级封锁协议锁协议 三级封三级封锁协议锁协议 2022/12/30兰彬制作3111.4活锁和死锁活锁和死锁l封锁技术可以有效地解决并发操作的一封锁技术可以有效地解决并发操作的一致性问题,但可能带来一些新的问题致性问题,但可能带来一些新的问题死锁死锁活锁活锁2022/12/30
18、兰彬制作3211.4.1活锁活锁如果事务如果事务T1封锁了数据封锁了数据R后,事务后,事务T2又请求又请求封锁封锁R,则,则T2等待。然后等待。然后T3也请求封锁也请求封锁R;l活锁活锁系统可能使某个事务系统可能使某个事务永远处于等待状永远处于等待状态态,得不到封锁的机会,得不到封锁的机会等等T1释放了释放了R后,系统首先批准了后,系统首先批准了T3的请求,的请求,T2仍然等待;接着仍然等待;接着T4又请求封锁又请求封锁R;T3释放释放R后,系统又批准了后,系统又批准了T4的请求的请求这样,这样,T2有可能永远处于等待状态。有可能永远处于等待状态。2022/12/30兰彬制作33避免活锁的方法
19、避免活锁的方法采用采用“先来先服务先来先服务”的策略的策略当多个事务请求封锁同一数据对象时,当多个事务请求封锁同一数据对象时,按请求封锁的按请求封锁的先后次序先后次序对这些事务排队对这些事务排队该该数数据据对对象象上上的的锁锁一一旦旦释释放放,首首先先批批准准申申请请队列中队列中第一个事务第一个事务获得锁。获得锁。2022/12/30兰彬制作3411.4.2死锁死锁l死锁死锁系统中有多个事务都处于等待状态,系统中有多个事务都处于等待状态,并且每个事务都在等待另外一个事务释放封锁并且每个事务都在等待另外一个事务释放封锁后才能继续执行下去,结果造成任何一个事务后才能继续执行下去,结果造成任何一个事
20、务都无法继续执行。都无法继续执行。T1封锁了数据封锁了数据R1,T2封锁了数据封锁了数据R2;这样,这样,T1在等待在等待T2释放释放R2上的锁,而上的锁,而T2也也在等待在等待T1释放释放R1上的锁,因此上的锁,因此T1和和T2永远永远都不能结束,形成死锁。都不能结束,形成死锁。然后然后T1又请求封锁数据又请求封锁数据R2,由于,由于R2被被T2封封锁,锁,T1只能等待;接着,只能等待;接着,T2又请求封锁又请求封锁R1,由于由于R1被被T1封锁,封锁,T2也只能等待;也只能等待;2022/12/30兰彬制作35解决死锁的方法解决死锁的方法解决死锁有两类方法解决死锁有两类方法1.预防死锁预防
21、死锁2.死锁的诊断与解除死锁的诊断与解除2022/12/30兰彬制作361.死锁的预防死锁的预防l预防死锁的发生就是要预防死锁的发生就是要破坏产生死锁的条件破坏产生死锁的条件。l预防死锁的方法有预防死锁的方法有2种:种:一次封锁法一次封锁法顺序封锁法顺序封锁法2022/12/30兰彬制作37(1)一次封锁法)一次封锁法l一次封锁法:要求每个事务必须一次封锁法:要求每个事务必须一次一次将所有要将所有要使用的数据使用的数据全部加锁全部加锁,否则就不能继续执行,否则就不能继续执行l一次封锁法存在的问题:一次封锁法存在的问题:(1)将以后要用到的全部数据加锁,势必)将以后要用到的全部数据加锁,势必扩大
22、扩大封锁范围封锁范围,从而,从而降低系统的并发度降低系统的并发度(2)很难事先精确地确定每个事务所要封锁的)很难事先精确地确定每个事务所要封锁的数据对象,但是又要求把该事务将要用到的数据对象,但是又要求把该事务将要用到的数据全部封锁,这样就有可能数据全部封锁,这样就有可能进一步扩大封进一步扩大封锁范围,降低系统效率锁范围,降低系统效率。2022/12/30兰彬制作38(2)顺序封锁法)顺序封锁法l顺序封锁法是:预先对数据对象规定一个封锁顺序封锁法是:预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。顺序,所有事务都按这个顺序实行封锁。l顺序封锁法存在的问题:顺序封锁法存在的问题:(
23、1)维护成本高)维护成本高数据库系统中可封锁的数据库系统中可封锁的数据对象很多,并且随数据的插入、删除等数据对象很多,并且随数据的插入、删除等操作而不断地变化,要维护如此多而且在不操作而不断地变化,要维护如此多而且在不断变化的数据的封锁顺序是非常困难,维护断变化的数据的封锁顺序是非常困难,维护的成本很高的成本很高2022/12/30兰彬制作39顺序封锁法(续)顺序封锁法(续)例如:例如:l顺序封锁法存在的问题:顺序封锁法存在的问题:(2)难于实现)难于实现事务的封锁请求可以随着事务的封锁请求可以随着事务的执行而动态地决定,很难事先确定每事务的执行而动态地决定,很难事先确定每一个事务要封锁哪些对
24、象,因此也就很难按一个事务要封锁哪些对象,因此也就很难按规定的顺序去施加封锁。规定的顺序去施加封锁。规定数据对象的封锁顺序为规定数据对象的封锁顺序为A,B,C,D,E。事务事务T3起初要求封锁数据对象起初要求封锁数据对象B,C,E,但当,但当它封锁了它封锁了B,C后,才发现还需要封锁后,才发现还需要封锁A,这样就破坏了封锁顺序。这样就破坏了封锁顺序。2022/12/30兰彬制作40死锁的预防(续)死锁的预防(续)l结论结论在操作系统中广泛采用的在操作系统中广泛采用的预防死锁预防死锁的策略并的策略并不很适合数据库的特点不很适合数据库的特点DBMS在解决死锁的问题上更普遍采用的是在解决死锁的问题上
25、更普遍采用的是诊断并解除死锁的方法诊断并解除死锁的方法2022/12/30兰彬制作412.死锁的诊断与解除死锁的诊断与解除l基本思想:基本思想:l由由DBMS的的并发控制子系统并发控制子系统定期定期检测系统中是检测系统中是否存在死锁,一旦检测到死锁,就要否存在死锁,一旦检测到死锁,就要设法解除设法解除允许允许死锁发生,当死锁发生后,再采取一定死锁发生,当死锁发生后,再采取一定的措施来的措施来诊断和解除诊断和解除死锁死锁l诊断死锁的诊断死锁的2种常用方法:种常用方法:1)超时法)超时法2)事务等待图法)事务等待图法2022/12/30兰彬制作42检测死锁:检测死锁:超时法超时法l超时法的基本思想
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 11 并发 控制
限制150内