第5篇_事务处理.ppt

  1. 1、本文档共52页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
5.3 并发控制 5.3.1并发带来的问题 并发执行二 如右图所示,T1和T2的操作穿插执行,结果是T1的修改操作没有起到应有的作用,这种现象称为“丢失修改”。 结束时Limit=79 W(Limit=79) t6 W(Limit =79) t5 R(Limit=80) t4 W(A) t3 R(Limit=80) t2 W(A) t1 T2 T1 时刻 开始时Limit = 80 5.3 并发控制 5.3.1并发带来的问题 并发执行三:学生甲执行事务T1,但是在确认是否真正选修课程时,他放弃了选修,事务被回滚。具体的执行过程如右图所示,学生乙的选课操作也没有获得成功,原因是在T1没有结束时,就读了Limit,这种现象叫做“读脏数据”。 W(Limit=0) t6 结束时Limit=0 RollBack t7 W(Limit =0) t5 R(Limit=1) t4 W(A) t3 R(Limit=1) t2 W(A) t1 T2 T1 时刻 开始时Limit = 1 5.3 并发控制 5.3.1并发带来的问题 并发执行四: T1在执行过程中读了两次Limit,但是发现Limit的两次余额不一样,由于不知道发生了什么情况而将T1撤消了。原因是在两个读操作中间执行了另外的事务T2,这种现象叫做“不可重复读”。 RollBack t6 结束时Limit=1 RollBack t7 R(Limit=0) t5 W(A) t4 W(Limit=0) t3 R(Limit=1) t2 W(A) t1 T2 T1 时刻 开始时Limit = 1 5.3 并发控制 5.3.1并发带来的问题 [例3] 如图所示,T1和T2交叉执行,不是串行调度,但是结果确与串行执行事务的结果相同,因此,是一个可串行化调度,是正确的调度。 结束时Limit=78 W(Limit =78) t6 R(Limit=79) t5 W(Limit=79) t4 W(A) t3 R(Limit=80) t2 W(A) t1 T2 T1 时刻 开始时Limit = 80 5.3 并发控制 5.3.2 封锁技术 (1)S锁和X锁 S锁又被称为共享锁(Share Locks),X锁又被叫做排它锁(eXclusive Locks)。 共享锁又称为读锁。若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这就保证了其它事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。 5.3 并发控制 5.3.2 封锁技术 排它锁又称为写锁。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这就保证了其它事务在T释放A上的锁之前不能读取和修改A。 Y Y Y Y Y N S Y N N X S X T2 T1 封锁类型的相容矩阵 Y=Yes,相容的请求 N=No,不相容的请求 5.3 并发控制 5.3.2 封锁技术 一级封锁协议是:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。事务结束包括正常结束(COMMIT)和非正常结束(ROLLBACK)。一级封锁协议可防止丢失修改,并保证事务T是可恢复的,但它不能保证可重复读和不读“脏”数据。 5.3 并发控制 5.3.2 封锁技术 二级封锁协议是:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。二级封锁协议除防止了丢失修改,还可进一步防止读“脏”数据,由于读完数据后即可释放S锁,所以它不能保证可重复读。 5.3 并发控制 5.3.2 封锁技术 三级封锁协议是:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。三级封锁协议除防止了丢失修改和不读“脏”数据外,还进一步防止了不可重复读。 5.3 并发控制 5.3.2 封锁技术 两段封锁协议的大体内容有以下4条: 1、在事务T的R(A)操作之前,先对A加S锁,如果加锁成功,则执行操作R(A),否则,将R(A)加入A的等待队列。 2、在事务T的W(A)操作之前,先对A加X锁,如果加锁成功,则执行操作W(A),否则,将W(A)加入A的等待队列。 5.3 并发控制 5.3.2 封锁技术 3、在收到事务的Abort或Commit请求后,释放T在每个数据上所加的锁,如果在数据A的等待队列中不空,即有其它的事务等待对A进行操作,则从队列中取出第一个操作,完成加锁,然后执行该操作。 4、执行Abort和Commit请求后,不再接收该事务的读写操作 。 5.3 并发控制 5.3.2

文档评论(0)

xiaofei2001128 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档