数据库原理及应用第2版课件作者何玉洁刘福刚第8章节事务与并发控制.ppt

数据库原理及应用第2版课件作者何玉洁刘福刚第8章节事务与并发控制.ppt

  1. 1、本文档共48页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
三级封锁协议示例 可重复读 不同级别的封锁协议总结 8.2.4 活锁和死锁 并发控制的封锁方法可能会引起活锁和死锁等问题。 活锁 避免活锁 简单方法是采用先来先服务的策略。 当多个事务请求封锁同一数据对象时,数据库管理系统按先请求先满足的事务排队策略,当数据对象上的锁被释放后,让事务队列中第一个事务获得锁。 死锁 两个事务相互等待对方先释放资源,则会造成死锁。 预防死锁的方法 一次封锁法:每个事务一次将所使用数据全部加锁。 存在的问题 降低系统并发度 难于事先精确确定封锁对象 顺序封锁法:预先对数据对象规定一个封锁顺序,所有事务都按这个顺序封锁。 存在的问题 维护成本:数据库系统中封锁的数据对象极多,并且在不断地变化。 难以实现:很难事先确定每一个事务要封锁哪些对象。 死锁的诊断——超时法 超时法。如果一个事务的等待时间超过了规定的时限,则认为发生了死锁。 优点是实现起来比较简单, 缺点是可能产生误判的情况: 如果事务因某些原因造成等待时间比较长,超过了规定的等待时限,则系统会误认为发生了死锁。 若时限设置的比较长,则不能对发生的死锁进行及时的处理。 死锁的诊断——等待图法 是一个有向图G=(T,U)。T为结点的集合,每个结点表示正在运行的事务;U为边的集合,每条边表示事务等待的情况。若T1等待T2,则T1和T2之间划一条有向边,从T1指向T2, 并发控制子系统周期性地(比如每隔几秒)生成事务的等待图,并进行检测。如果发现图中存在回路,则表示系统中出现了死锁。 死锁的解除 通常采用的方法是选择一个处理死锁代价最小的事务,将其撤销,释放此事务所持有的全部锁,使其他事务可以继续运行下去。 而且,对撤销事务所执行的数据修改操作必须加以恢复。 8.2.5 并发调度的可串行性 多个事务的并发执行是正确的,当且仅当其结果与按某一顺序的串行执行的结果相同,则我们称这种调度为可串行化的调度。 可串行性是并发事务正确性的准则,按这个准则,一个给定的并发调度,当且仅当它是可串行化的时,才认为是正确的调度。 可串行化调度 例:设有两个事务,分别包含下列操作: 事务T1:读B;A=B+1;写回A 事务T2:读A;B=A+1;写回B 设A、B的初值均为4, 按T1 ? T2顺序执行,结果:A=5,B=6; 按T2 ? T1顺序执行,结果:A=6,B=5。 当并发调度时,如果执行的结果是这两者之一,则都是正确的结果。 策略1:串行调度 策略2:并行调度 不可串行化 可串行化 8.2.6 两段锁协议 将所有的事务分为两个阶段对数据进行加锁和解锁: 在对任何数据进行读写操作之前,首先要获得对该数据的封锁。 在释放一个封锁之后,事务不再申请和获得任何其他封锁。 两段锁协议是实现可串行化调度的充分条件。 两段锁协议 可以将每个事务分成两个时期:申请封锁期和释放封锁期,申请期申请要进行的封锁,释放期释放所占有的封锁。 在申请期不允许释放任何锁,在释放期不允许申请任何锁,这就是两段式封锁。 一些结论 事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件。 若并发事务都遵守两段锁协议,则对这些事务的任何并发调度策略都是可串行化的。 若并发事务的一个调度是可串行化的,不一定所有事务都符合两段锁协议。 调度示例 遵守两段锁协议 不遵守两段锁协议 尚辅网 / 数据库原理与应用教程 (第2版) 人民邮电出版社 第8章 事务与并发控制 8.1 事务 8.1.1 事务的基本概念 8.1.2 事务的特征 8.1.3 事务处理模型 8.2 并发控制 8.1.1 事务的基本概念 事务是用户定义的数据操作系列,这些操作作为一个完整的工作单元,一个事务内的所有语句被作为一个整体,要么全部执行,要么全部不执行。 例如:对于一个转帐活动:A帐户转帐给B帐户n元钱,这个活动包含两个动作: 第一个动作:A帐户 - n 第二个动作:B帐户 + n 说明 假设第一个操作成功了,第二个操作由于某种原因没有成功,在系统恢复正常后,A账户的金额应是多少? 如果B账户的金额没有变化,则正确的情况是A账户的金额也应该没有变化。 怎样保证在系统恢复之后,A账户中的金额没有减少?这就要用到事务的概念。 事务可以保证在一个事务中的全部操作或者全部成功,或者全部失败。 8.1.2 事务的特征 原子性(Atomicity) :指事务是数据库的逻辑工作单位,事务中的操作要么都做,要么都不做。 一致性(Consistency) :指事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。 隔离性(Isolation) :指数据库中一个事务的执行不能被其它事务干扰。 持久性( Durability ) :也称为永久性。指事务一旦提交,其对数据库数据的

您可能关注的文档

文档评论(0)

带头大哥 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档