第8章 并发控制要点.pptVIP

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第八章 并发控制 前言 数据库是一个共享资源. 应允许多个用户程序并行地存取数据库. 交叉并发方式、同时并发方式 当多个用户程序并发地存取同一数据的情况下,若对并发操作不加以控制,就会存取和存储不正确的数据,破坏数据库的完整性. 并发控制:用正确的方式调度并发操作,避免造成数据的不一致性,使一个用户事务的执行不受其他事务的干扰. 并发控制的主要方法: 封锁机制 8.1 并发控制概述 为了保证事务的隔离性和一致性,必须对事务的并发控制加以控制,首先考虑一个例子: 1.甲事务读出某航班的机票余额A=16 2.乙事务读出同一航班的机票余额A=16 3.甲卖出一张机票,A=A-1,这时A=15,把A写回数据库 4.乙也卖出一张机票,A=A-1,这时A=15,把A写回数据库 8.1 并发控制概述 在这种情况下,卖出两张机票,但数据库中机票的数量只减少了1。这时发生数据库的不一致,这种不一致是由并发操作引起的。 仔细分析并发操作带来的数据不一致性包括三类:丢失修改、不可重复读和读“脏”数据。 8.1 并发控制概述 1.丢失修改 两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了T1的结果,导致T1修改丢失。 T1 T2 读A=16 读A=16 A=A-1 写回A=15 A=A-1 写回A=15 8.1 并发控制概述 2.不可重复读 不可重复读是指事务T1读取数据后,事务T2执行更新操作,是T1无法再现前一次读取结果。具体讲,不可重复读包括三种情况: ① 事务T1读取某一数据后,事务T2对其做了修改,当事务T1再次读取该数据时,得到与前一次不同的值。 8.1 并发控制概述 T1 T2 读A=50 读B=100 求和=150 读B=100 B=B*2 写回B=200 读A=50 读B=200 求和=250 8.1 并发控制概述 ② 事务T1按一定条件从数据库中读取了某些数据记录后,事务T2删除了其中部分记录,当T1再次按相同条件读取数据时,发现某些记录消失。 ③ 事务T1按一定条件从数据库中读取数据后,事务T2插入了一些记录,当T1再次按相同条件读取时,发现多了一些记录。 后两种不可重复读有时也称为幻影现象。 8.1 并发控制概述 3.读“脏”数据 读“脏”数据是指事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤销,这时T1已修改过的数据恢复原值,T2读到的数据与数据库中的数据不一致,则T2读到的数据就为“脏”数据。 8.1 并发控制概述 T1 T2 读C=100 C=C*2 写回C 读C=200 ROLLBACK C恢复为100 8.1 并发控制概述 产生上述三类数据不一致性的主要原因是并发操作破坏了事务的隔离性。并发控制就是要用正确的方式调度并发操作,使一个用户事务的执行不受其它事务的干扰,从而避免造成数据的不一致性。并发控制的主要技术是封锁。 8.2 封锁 封锁是实现并发控制的一个非常重要的技术。所谓封锁就是事务T在对某个数据对象例如表、记录等操作之前,先向系统发出请求,对其加锁。加锁后事务 T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。 基本的锁类型有两种:排它锁和共享锁。 8.3 封锁协议 在运用X锁和S锁对数据对象加锁时,还需要约定一些规则,例如,何时申请X锁或S锁、持锁时间、何时释放等,称这些规则为封锁协议。 8.3 封锁协议 一、一级封锁协议 一级封锁协议是:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。 二、二级封锁协议 二级封锁协议是:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。 三、三级封锁协议 三级封锁协议是:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。 8.4 活锁和死锁 一、活锁 如果事务T1封锁了数据R,事务T2又申请封锁R,于是T2等待。T3也申请封锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2仍然等待。然后T4申请R…..,可能造成T2永远等待,这就是活锁。 避免活锁最简单的方法是先来先服务。 8.4 活锁和死锁 二、死锁 多个事务互相竞争资源而造成的互相等待即死锁。解决死锁问题主要有两种方法:一类是死锁的预防;一类是允许产生死锁,采取一定手段定期检测,如果有死锁则解除。 8.4 活锁和死锁 1.死锁的预防: 一次封锁法 顺序封锁法 2.死锁的诊断与解除 超时法 等待图法 8.5 并发调度的可串行性 并行事务中,并行操作的调度是随机的 几个并

文档评论(0)

风凰传奇 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档