- 1、本文档共37页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
7.5 并发控制 主要内容 数据库并发操作带来的数据不一致问题 锁 锁协议 封锁带来的问题:活锁和死锁 并发操作的调度 并发控制 数据库是一个可以供多个用户共同使用的共享资源。 串行访问,每个时刻只能有一个用户应用程序对数据库进行存取,其它用户程序必须等待。 缺点:制约数据库访问效率的瓶颈,不利于数据库资源的利用。 并行访问,通过并发控制机制允许多个用户并发地访问数据库。 并发控制 当多个用户并发地访问数据库时就会产生多个事务同时存取同一数据的情况。 若对并发操作不加以控制就会造成错误地存取数据,破坏数据库的一致性。 数据库的并发控制机制是衡量数据库管理系统性能的重要技术标志。 7.5.1 DB并发操作带来的数据不一致问题 例7.16 在一个飞机订票系统中,可能会出现的业务: (1)甲售票点读航班X的机票余额数为A=25; (2)紧接着,乙售票点读同一航班X的机票余额数A=25; (3)甲售票点卖出一张机票,然后修改机票余额数A=A-1为24,并把A写回数据库; (4)乙售票点也卖出一张机票,同样接着修改机票余额数A=A-1为24,并把A写回数据库。 设甲售票点对应于事务T1,乙售票点对应于事务T2,则上述事务过程的描述如图 (1)丢失修改 (2)读过时数据 (3)读“脏”数据 DB并发操作带来的三类数据不一致问题 并发操作可能带来的数据不一致性情况有三种 (1)丢失修改 (2)读过时数据 (3)读“脏”数据 DB并发操作带来的三类数据不一致问题 7.5.2 锁 定义 锁是防止存取同一资源的用户之间出现不正确地修改数据或不正确地更改数据结构的一种机制。 基本的锁方式有二种: 排它锁(Exclusive Locks ,简记为X锁) 共享锁(Share Locks ,简记为S锁) (1)排它锁(X锁) 当某个事务T为修改某个数据项A且不允许其它事务修改该数据项,或不允许其它事务对该数据项加S锁时,则该事务可以对A加排它锁,排它锁又称为写锁。 本事务:读A,修改A 其它事务:在T释放A上的X锁之前不能读A和修改A (2)共享锁(S锁) 当某个事务T希望阻止其它事务修改正为它读取的某个数据项A时,则该事务可以对A加共享锁,共享锁又称为读锁。 本事务:读A,不能修改A 其它事务:加S锁读A,在T释放A上S锁之前不能修改A S锁和X锁的共存相容矩阵 7.5.3 锁协议 当一个事务T要对某个项加锁时,还必须遵守某种规则,比如在什么条件下可以申请S锁或X锁,持锁时间如何确定、何时释放锁等。一般称这些规则为锁协议(Locking Protocol)。 对加锁方式规定不同的规则,就形成了不同的锁协议。 不正确的并发操作可能带来的丢失修改、读过时数据和读“脏”数据等不一致性问题,三级锁协议在不同程度上可以解决这些问题。 (1)一级锁协议 事务T在修改数据R之前必须先对数据R所在的项申请加X锁,在获得了X加锁后,直到该事务T结束时才释放所加的X锁。 如果未获准加X锁,则该事务T进入等待状态,直到获准X加锁后该事务才继续执行。 (1)一级锁协议 本事务:读R,修改R;用COMMIT和ROLLBACK释放X锁 其它事务:在T结束前不能读R,也不能修改R 作用:防止丢失修改 (2)二级锁协议 二级锁协议除包括一级锁协议的内容外,还包括如下规则: 事务T在读数据R之前必须先对数据R所在的项申请加S锁,在获得了S加锁后,读完数据R后即可释放所加的S锁。 如果未获准加S锁,则该事务T进入等待状态,直到获准S加锁后该事务才继续执行。 (2)二级锁协议 一级锁协议+ 本事务:读R,不能修改R ;用UNLOCK 释放S锁(不需 等T结束) 其它事务:可加S锁读R,不能修改R 作用:防止丢失修改,防止读“脏”数据 (3)三级锁协议 三级锁协议除包括一级锁协议的内容外,还包括如下规则 : 事务T在读数据R之前必须先对数据R所在的项申请加S锁,在获得了S加锁后,直到该事务T结束时才释放所加的S锁。 如果未获准加S锁,则该事务T进入等待状态,直到获准S加锁后该事务才继续执行 。 (3)三级锁协议 一级锁协议+ 本事务:读R,不能修改R;用COMMIT和ROLLBACK释放其它事务:可加S锁读R,不能修改R 作用:防止丢失修改,防止读“脏”数据,防止读过时数据 7.5.4 封锁带来的问题(1)活锁 如果事务T1封锁了数据R,事务T2又请求封锁R,于是T2等待,T3也请求封锁R,当T1释放了R上的封锁之后,系统首先批准了T3的请求,T2仍然等待,然后T4又请求封锁R,当T3释放了R上的封锁之后,系统又批准了T
文档评论(0)