第8章 事务与并发控制.ppt

  1. 1、本文档共55页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
8.2.3 封锁协议 在运用X锁和S锁对数据对象进行加锁时,还需要约定一些规则,如何时申请X锁或S锁、持锁时间、何时释放锁等。 称这些规则为封锁协议或加锁协议。 对封锁方式规定不同的规则,就形成了各种不同级别的封锁协议。 不同级别的封锁协议达到的系统一致性级别不同。 * * 一级封锁协议 对事务T要修改的数据加X锁,直到事务结束(包括正常结束和非正常结束)时才释放。 一级封锁协议可以防止丢失修改,并保证事务T是可恢复的 但不能保证可重复读和不读“脏”数据。 * * 一级封锁协议示例 没有丢失修改 * * 二级封锁协议 一级封锁协议加上对事务T对要读取的数据加S锁,读完后即释放S锁。 除了可以防止丢失修改外,还可以防止读“脏”数据。 但不能保证可重复读数据。 * * 二级封锁协议示例 没有读脏数据 * * 三级封锁协议 一级封锁协议加上事务T对要读取的数据加S锁,并直到事务结束才释放。 除了可以防止丢失修改和不读“脏”数据之外,还进一步防止了不可重复读。 * * 三级封锁协议示例 可重复读 * * 不同级别的封锁协议总结 * * 8.2.4 活锁和死锁 和操作系统一样,并发控制的封锁方法可能会引起活锁和死锁等问题。 活锁 死锁 * * 活锁 * * 避免活锁 采用先来先服务的策略。 当多个事务请求封锁同一数据对象时,数据库管理系统按先请求先满足的事务排队策略,当数据对象上的锁被释放后,让事务队列中第一个事务获得锁 * * 死锁 两个事务相互等待对方先释放资源 * * 解决死锁的方法 1. 预防死锁 一次封锁法 顺序封锁法 2. 死锁的诊断与解除 超时法 事务等待图法 * * 预防死锁:一次封锁法 一次封锁法是每个事务一次将所有要使用的数据全部加锁。 存在的问题 降低系统并发度 难于事先精确确定封锁对象 * * 预防死锁:顺序封锁法 顺序封锁法是预先对数据对象规定一个封锁顺序,所有事务都按这个顺序封锁。 顺序封锁法存在的问题 维护成本:数据库系统中封锁的数据对象极多,并且在不断地变化。 难以实现:很难事先确定每一个事务要封锁哪些对象。 * * 预防死锁结论 在操作系统中广为采用的预防死锁的策略并不很适合数据库的特点。 DBMS在解决死锁的问题上更普遍采用的是诊断并解除死锁的方法。 * * 死锁的诊断:超时法 如果一个事务的等待时间超过了规定的时限,就认为发生了死锁。 优点:实现简单。 缺点 有可能误判死锁。 时限若设置得太长,死锁发生后不能及时发现。 * * 死锁的诊断:等待图法 用事务等待图动态反映所有事务的等待情况 事务等待图是一个有向图G=(T,U) T为结点的集合,每个结点表示正在运行的事务 U为边的集合,每条边表示事务等待的情况 若T1等待T2,则T1,T2之间划一条有向边,从T1指向T2 * * 等待图法(续) 图(a)中,事务T1等待T2,T2等待T1,产生了死锁 图(b)中,事务T1等待T2,T2等待T3,T3等待T4,T4又等待T1,产生了死锁 图(b)中,事务T3可能还等待T2,在大回路中又有小的回路。 * * 等待图法(续) 并发控制子系统周期性地(比如每隔数秒)生成事务等待图,检测事务。 如果发现图中存在回路,则表示系统中出现了死锁。 * * 解除死锁 选择一个处理死锁代价最小的事务,将其撤消。 释放此事务持有的所有的锁,使其它事务能继续运行下去。 * * 8.2.5 并发调度的可串行性 多个事务的并发执行是正确的,当且仅当其结果与按某一顺序的串行执行的结果相同,则我们称这种调度为可串行化的调度。 可串行性是并发事务正确性的准则,按这个准则,一个给定的并发调度,当且仅当它是可串行化的时,才认为是正确的调度。 * * 可串行化调度 例:设有两个事务,分别包含下列操作: 事务T1:读B;A=B+1;写回A 事务T2:读A;B=A+1;写回B 设A、B的初值均为4, 给出对这两个事务不同的调度策略。 * * 策略1:串行调度 * * 策略2:并行调度 不可串行化 可串行化 * * 8.2.6 两段锁协议 两段锁协议是可串行化调度的充分条件。 可以将每个事务分成两个时期:申请封锁期和释放封锁期,申请期申请要进行的封锁,释放期释放所占有的封锁。 在申请期不允许释放任何锁,在释放期不允许申请任何锁,这就是两段式封锁。 * * 一些结论 事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件。 若并发事务都遵守两段锁协议,则对这些事务的任何并发调度策略都是可串行化的。 若并发事务的一个调度是可串行化的,不一定所有事务都符合两段锁协议。 * * 调度示例 遵守两段锁协议 不遵守两段锁协议 * * 开场白: * 数据库原理与实践教程 ——SQL Server 2005 第8章 事务与并发控制 *

文档评论(0)

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

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

1亿VIP精品文档

相关文档