- 1、本文档共104页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据库chapter9讲述
如何解除死锁? 一般情况下,只要将产生死锁的语句提交就可以了。 但是在实际的执行过程中,用户可能不知道产生死锁的语句是哪一句。可以将程序关闭并重新启动就可以了。 9.5 并发调度的可串行性 DBMS对并发事务不同的调度可能会产生不同的结果: 一、什么样的并发操作调度是正确的? 二、如何保证并发操作的调度是正确的? 一、什么样的并发操作调度是正确的 计算机系统对并行事务中并行操作的调度是的随机的,而不同的调度可能会产生不同的结果。 将所有事务串行起来的调度策略一定是正确的调度策略。 如果一个事务运行过程中没有其他事务在同时运行,也就是说它没有受到其他事务的干扰,那么就可以认为该事务的运行结果是正常的或者预想的。 什么样的并发操作调度是正确的(续) 以不同的顺序串行执行事务也有可能会产生不同的结果,但由于不会将数据库置于不一致状态,所以都可以认为是正确的。 几个事务的并行执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同。这种并行调度策略称为可串行化(Serializable)的调度。 什么样的并发操作调度是正确的(续) 可串行性是并行事务正确性的唯一准则 例:现在有两个事务,分别包含下列操作: 事务1:读B;A=B+1;写回A; 事务2:读A;B=A+1;写回B; 假设A的初值为2,B的初值为2。 什么样的并发操作调度是正确的(续) 对这两个事务的不同调度策略 串行执行 串行调度策略1 串行调度策略2 交错执行 不可串行化的调度 可串行化的调度 (a) 串行调度策略,正确的调度 Slock B Y=B=2 Unlock B Xlock A A=Y+1 写回A(=3) Unlock A ? ? ? ? ? ? ? Slock A X=A=3 Unlock A Xlock B B=X+1 写回B(=4) Unlock B T1 T2 假设A、B的初值均为2。 按T1→T2次序执行结果为A=3,B=4 串行调度策略,正确的调度 (b) 串行调度策略,正确的调度 ? ? ? ? ? ? ? Slock B Y=B=3 Unlock B Xlock A A=Y+1 写回A(=4) Unlock A SlockA X=A=2 Unlock A Xlock B B=X+1 写回B(=3) Unlock B ? ? ? ? ? T1 T2 假设A、B的初值均为2。 T2→T1次序执行结果为B=3,A=4 串行调度策略,正确的调度 (c) 不可串行化的调度 Slock B Y=B=2 ? ? Unlock B ? Xlock A A=Y+1 写回A(=3) ? ? ? Unlock A ? ? Slock A X=A=2 ? Unlock A ? ? ? Xlock B B=X+1 写回B(=3) ? Unlock B T1 T2 执行结果与(a)、(b)的结果都不同 是错误的调度 (d) 可串行化的调度 Slock B Y=B=2 Unlock B Xlock A ? A=Y+1 写回A(=3) Unlock A ? ? ? ? ? ? ? ? Slock A 等待 等待 等待 X=A=3 Unlock A Xlock B B=X+1 写回B(=4) Unlock B T1 T2 执行结果与串行调度(a)的执行结果相同 是正确的调度 9.5 并发调度的可串行性 一、什么样的并发操作调度是正确的 二、如何保证并发操作的调度是正确的 二、如何保证并发操作的调度是正确的 为了保证并行操作的正确性,DBMS的并行控制机制必须提供一定的手段来保证调度是可串行化的。 从理论上讲,在某一事务执行时禁止其他事务执行的调度策略一定是可串行化的调度,这也是最简单的调度策略,但这种方法实际上是不可行的,因为它使用户不能充分共享数据库资源。 如何保证并发操作的调度是正确的(续) 保证并发操作调度正确性的方法 封锁方法:两段锁(Two-Phase Locking,简称2PL)协议 时标方法 乐观方法 9.6 两段锁协议 两段锁协议 指所有事务必须分两个阶段对数据项加锁和解锁 1. 在对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁 2. 在释放一个封锁之后,事务不再获得任何其他封锁。 两段锁协议(续) “两段”锁的含义 事务分为两个阶段 第一阶段是获得封锁,也称为扩展阶段; 事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁 第二阶段是释放封锁,也称为收缩阶段。 事务可以释放任何数据项上的任何类型的锁,但是不能再申请任何锁 两段锁协议(续) 例: 事务1的封锁序列: Slock A ... S
文档评论(0)