第08章 并发控制.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第八章 并发控制 在多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务真正的并行运行,称为并发执行方式。 当多个用户并发地存取数据库时就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会存取和存储不正确的数据,破坏数据库的一致性。 8.1 并发控制概述 当同一数据库系统中有多个事务并发运行时,如果不加以适当控制,可能产生数据的不一致性,概括起来有三种不一致性:丢失修改、不可重复读、污读。 ? 一、丢失修改 ① 甲售票点(甲事务)读出某航班的机票余额A=50; ② 乙售票点(乙事务)读出同一航班的机票余额A=50; ③ 甲售票点卖出10张机票,修改余额A←A-10,把A=40写回数据库; ④ 乙售票点也卖出10张机票,修改余额A←A-10,把A=40写回数据库。 结果明明卖出20张机票,数据库中机票余额只减少10。其原因是第④步中乙事务修改覆盖了甲事务的修改。如下图。 ? 二、不可重复读 ① 甲售票点(甲事务)读出某航班的机票余额A=50; ② 乙售票点(乙事务)读出同一航班的机票余额A=50; ③ 乙售票点卖出10张机票,修改余额A←A-10,把A=40写回数据库; ④ 甲售票点再次读出该航班的机票余额A=40,与步骤①读出的余额不一致。 结果表明甲售票点连续二次读出的同样数据前后不一致。如下图。 ? 三、污读 ① 甲售票点(甲事务)读出某航班的机票余额A=50; ② 甲售票点卖出10张机票,修改余额A←A-10,把A=40写回数据库; ③ 乙售票点(乙事务)读出同一航班的机票余额A=40; ④ 甲售票点在将A=40写回数据库,由于某种原因,需要回退这个操作,即恢复A=50。结果表明乙售票点读出的数据是个无效的数据,即污读。如下图。 ? 并发操作破坏了事务的隔离性。 并发控制的主要技术是封锁。 8.2 封锁(Locking) 一、定义 事务T在对某个数据对象(如:表、记录等)操作之前,先向系统发出请求,对其加锁。加锁后的数据对象不允许其它事务对其对象操作。 分为两类:排它锁 和 共享锁。 ? 二、排它锁(Exclusive Locks,简称X锁) 又称“写锁”。 若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它事务不能再对A加任何类型的锁,直到T释放A上的X锁。 X锁保证在事务T释放A之前,其它事务不能再读取或修改A。 ? 三、共享锁(Share Locks,简称S锁) 又称“读锁”。 若事务T对数据对象A加上S锁,则允许T读取A,但不能修改A,其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。 S锁保证在事务T释放A之前,其它事务可以读取A,但不能修改A。 ? 四、排它锁与共享锁的相容关系 图中的黄色区域表示:若事务T1已经加上X锁,则T2不能再加S锁。 8.3 封锁协议(Locking Protocol) 一、定义 对数据对象加锁时,何时申请X锁或S锁、持锁时间、何时释放等加锁规则。 分为两类:一级封锁协议、二级封锁协议 和 三级封锁协议。 ? 二、一级封锁协议 事务T在修改数据R之前必须先对其加X锁,直到事务结束后才释放。事务包括正常结束(COMMIT)和非正常结束(ROLLBACK)事务。 一级封锁协议解决了“丢失修改”的问题,如下图。 一级封锁协议不能解决“污读”的问题。如下图。 ? 三、二级封锁协议 在一级封锁协议的基础上,加上:事务T在读取数据R之前必须先对其加S锁,读完后即可释放。 二级封锁协议不仅可以“丢失修改”的问题,还可解决“污读”的问题。如下图。 二级封锁协议不能解决“不可重复读”的问题。如下图。 ? 四、三级封锁协议 在一级封锁协议的基础上,加上:事务T在读取数据R之前必须先对其加S锁,直到事务结束后才释放。 三级封锁协议不仅可以解决“丢失修改”、“污读”的问题,还可解决“不可重复读”的问题。如下图。 ? 8.4 活锁和死锁 与操作系统一样,封锁的方法可能引起活锁和死锁。 一、活锁 如果事务T1封锁了数据R,事务T2又请求封锁R,于是T2等待。 事务T3也请求封锁R,当T1释放R的封锁后,若T3得到了封锁,T2仍然等待。 事务T4又请求封锁R,当T3释放R的封锁后,若T4得到了封锁,T2仍然等待。 ... T2可能永远等待,这就是活锁。如下图。 解决:采用先来先服务的策略。 ? 二、死锁 如果事务T1封锁了数据R1,T2封锁了数据R2。 然后T1又请求封锁R2,因T2已经封锁了R2,于是T1等待T2释放R2。 然后T2又请求封锁R1,因T1已经封锁了R1,于是T2等待T1释放R1。 T1等待T2,T2等待T1,形成死锁。如下图。 死锁的预防 · 一次加锁法:要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。

文档评论(0)

PPT精品 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档