并发控制课件_第1页
并发控制课件_第2页
并发控制课件_第3页
并发控制课件_第4页
并发控制课件_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

7.5并发控制第7章数据库保护技术1主要内容数据库并发操作带来的数据不一致问题锁锁协议封锁带来的问题:活锁和死锁并发操作的调度2并发控制数据库是一个可以供多个用户共同使用的共享资源。串行访问,每个时刻只能有一个用户应用程序对数据库进行存取,其它用户程序必须等待。缺点:制约数据库访问效率的瓶颈,不利于数据库资源的利用。并行访问,通过并发控制机制允许多个用户并发地访问数据库。37.5.1DB并发操作带来的数据不一致问题例7.16在一个飞机订票系统中,可能会出现的业务:(1)甲售票点读航班X的机票余额数为A=25;(2)紧接着,乙售票点读同一航班X的机票余额数A=25;(3)甲售票点卖出一张机票,然后修改机票余额数A=A-1为24,并把A写回数据库;(4)乙售票点也卖出一张机票,同样接着修改机票余额数A=A-1为24,并把A写回数据库。设甲售票点对应于事务T1,乙售票点对应于事务T2,则上述事务过程的描述如图5时间T1T2DB中的A值t025t1read(A)t2read(A)t3A:=A-1t4write(A)t524t6A:=A-1t7write(A)t824丢失修改(1)丢失修改6时间T1T2DB中的A值t025t1read(A)t2read(A)t3A:=A-10t4write(A)t515读过时数据(2)读过时数据7DB并发操作带来的三类数据不一致问题并发操作可能带来的数据不一致性情况有三种(1)丢失修改(2)读过时数据(3)读“脏”数据9产生原因:

并发操作破坏了事务的隔离性并发控制就是要通过正确的调度方式,使一个用户事务的执行不受其它事务的干扰,从而避免造成数据的不一致性。DB并发操作带来的三类数据不一致问题107.5.2锁定义锁是防止存取同一资源的用户之间出现不正确地修改数据或不正确地更改数据结构的一种机制。基本的锁方式有二种:排它锁(ExclusiveLocks,简记为X锁)共享锁(ShareLocks,简记为S锁)

11(2)共享锁(S锁)当某个事务T希望阻止其它事务修改正为它读取的某个数据项A时,则该事务可以对A加共享锁,共享锁又称为读锁。本事务:读A,不能修改A其它事务:加S锁读A,在T释放A上S锁之前不能修改A13SX-S×X××S锁和X锁的共存相容矩阵147.5.3锁协议当一个事务T要对某个项加锁时,还必须遵守某种规则,比如在什么条件下可以申请S锁或X锁,持锁时间如何确定、何时释放锁等。一般称这些规则为锁协议(LockingProtocol)。对加锁方式规定不同的规则,就形成了不同的锁协议。不正确的并发操作可能带来的丢失修改、读过时数据和读“脏”数据等不一致性问题,三级锁协议在不同程度上可以解决这些问题。15事务T要修改数据R:申请加X锁?等待加X锁YNT结束释放X锁(1)一级锁协议本事务:读R,修改R;用COMMIT和ROLLBACK释放X锁其它事务:在T结束前不能读R,也不能修改R

作用:防止丢失修改17(2)二级锁协议二级锁协议除包括一级锁协议的内容外,还包括如下规则:事务T在读数据R之前必须先对数据R所在的项申请加S锁,在获得了S加锁后,读完数据R后即可释放所加的S锁。如果未获准加S锁,则该事务T进入等待状态,直到获准S加锁后该事务才继续执行。18事务T要读数据R:申请加S锁?等待加S锁读数据YN释放S锁(2)二级锁协议一级锁协议+本事务:读R,不能修改R;用UNLOCK释放S锁(不需等T结束)

其它事务:可加S锁读R,不能修改R

作用:防止丢失修改,防止读“脏”数据19事务T要读数据R:申请加S锁?等待加S锁读数据YNT结束释放S锁(3)三级锁协议一级锁协议+

本事务:读R,不能修改R;用COMMIT和ROLLBACK释放其它事务:可加S锁读R,不能修改R

作用:防止丢失修改,防止读“脏”数据,防止读过时数据217.5.4封锁带来的问题(1)活锁如果事务T1封锁了数据R,事务T2又请求封锁R,于是T2等待,T3也请求封锁R,当T1释放了R上的封锁之后,系统首先批准了T3的请求,T2仍然等待,然后T4又请求封锁R,当T3释放了R上的封锁之后,系统又批准了T4的请求,T2继续等待,……,如此下去,T2有可能永远等待。这种可能存在某个事务永远处于等待状态、得不到封锁的机会的现象,称为活锁。解决方法:先来者先执行。22T1T2①②④③(2)死锁两个或两个以上的事务都处于等待状态,每个事务都在等待其中另一个事务解除封锁,它才能继续执行下去,结果任何一个事务都无法继续执行,这种现象称为死锁。23(3)死锁的预防(OS)②顺序加锁法预先对数据项规定一个加锁顺序,所有事务都按这个顺序进行加锁。缺点:很难按规定的顺序进行加锁。25(4)死锁的检测与解除1)超时法如果一个事务的等待时间超过了规定的时限,就认为发生了死锁。优点:实现简单缺点:有可能误判死锁若时限设置的太长,可能出现死锁发生后不能及时发现的情况。26(4)死锁的检测与解除2)有向等待图法①检测死锁②解除死锁选择一个处理死锁代价最小的事务,将其撤消,释放它持有的所有锁。297.5.5并发调度的可串行性通常情况下,如果一个事务在执行过程中没有与其它事务并发运行,也就是说该事务的执行没有受到其它事务干扰时,就认为该事务的运行结果是正常的或者是预想的。也就是说,当多个事务串行执行时,各事务的运行结果一定是正确的。因此,仅当几个事务的并发运行结果与这些事务按某一次序串行运行的结果相同时,这样的并发操作才是正确的。307.5.5并发调度的可串行性通常把按某一执行次序安排的事务执行的步骤称为调度(Schedule)。多个事务的并发执行是正确的,当且仅当其结果与按某一顺序串行地执行它们时的结果相同。称这种调度称为可串行化(Serializable)调度。可串行性(Serializability)是并发事务正确性的判别准则。按照这个准则的规定,一个给定的并发调度,当且仅当它可串行化时,才认为是正确的调度。317.5.5并发调度的可串行性示例事务T1:从账号A将数量为100的款项转到账号B;事务T2:从账号B将20%的款项转到账号C。假设A、B和C的初值分别为600、300和100。32(a)(b)T2Read(A) A:=A-100Write(A)Read(B) B:=B+100Write(B) Read(B) Temp:=B*0.2B:=B-tempWrite(B)Read(C) C:=C+tempWrite(C)Read(B)Temp:=B*0.2B:=B-tempWrite(B)Read(C) C:=C+tempWrite(C)Read(A)A:=A-100Write(A)Read(B)B:=B+100Write(B)T2T1T1正确的并发调度33T1T2T1T2Read(A) A:=A-100Write(A) Read(B)Temp:=B*0.2B:=B-tempWrite(B)Read(B) B:=B+100Write(B) Read(C)C:=C+tempWrite(C)Read(A)A:=A-100Write(A)Read(B)B:=B+100Write(B)Read(B)Temp:=B*0.2B:=B-tempWrite(B)Read(C) C:=C+tempWrite(C)(c)(d)正确的.vs.错误的并发调度347.5.6两段锁协议DBMS普遍采用加锁方法实现并发操作调度的可串行性,从而保证调度的正确性。两段锁(Two-PhaseLocking,简称2PL)协议就是保证并发调度可串行性的锁协议。①规则在每一个事务中,所有的加锁语句都在解锁语句之前。357.5.6两段锁协议加锁段(扩展阶段):事务可以申请获得任何数据项上

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论