第九章并发控制.ppt

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第九章并发控制.ppt

第九章: 并发控制 并发控制概述 封锁(Locking) 封锁协议 活锁和死锁 并发调度的可串行性 两段封锁协议 并发控制概述 多用户数据库系统: 事务是DBMS的执行单位 多用户操作数据库带来的问题--并发问题 问题1: 在飞机订票系统中,假定有两个售票点甲和乙可以各自售票, 每一航班的剩余票数存放在数据库中, 其结果是丢失修改 丢失修改:两个事务T1和T2读入同一数据并修改, T2提交的结果破坏了T1提交的结果, T1的修改丢失 并发控制概述 并发控制概述 问题2: 两个用户分别对数据库中数据进行操作,结果出现不可重复读现象 不可重复读: 事务T1读取某一数据后,事务T2读取并修改了同一数据,使T1无法再现前一次的读取结果; T2的插入和删除?幻影现象 并发控制概述 问题3: 两个用户分别对数据库中数据进行操作,结果出现读取脏数据现象 脏读:事务T1修改了某一数据后,事务T2读取了同一数据,而T1由于某种原因被撤销,则称T2读到了脏数据 并发控制概述 出现三类问题的原因:破坏了事务的隔离性 有些DBMS提供脏读功能 并发控制概述 封锁(Locking) 并发控制: 用正确的方式调度并发操作, 避免由于并发操作引起的三类问题--即保证事务的隔离性 并发控制的主要方法: 封锁机制 封锁: 是指事务T在对某个数据对象(例如表, 记录等)操作之前, 先向系统发出请求, 对其加锁. 加锁后事务T可以操作该对象, 在事务T释放它的封锁之前, 其他的事务不能更新该数据对象 基本的封锁类型: 排它锁(X)和共享锁(S) 封锁(Locking) X锁: 排它锁或称写锁, 若事务T对数据对象A加上X锁, 则只允许T读取和修改A, 其他事务对A的任何封锁请求都不能成功 S锁: 共享锁或称读锁, 若事务T对数据对象A加上S锁, 则事务T可以读A, 但不可以修改A, 其他事务可以对A加S锁, 而不可以加X锁 封锁类型的相容矩阵 封锁协议 封锁协议: 对数据对象加锁时, 还需约定一些规则 对封锁方式规定不同的规则, 形成不同的封锁协议 一级封锁协议: 事务T在修改数据R之前必须先对其加X锁, 直到事务结束才释放 可防止丢失修改, T可恢复 如果只是读数据, 不需加锁, 不能保证可重复读, 不读脏数据 封锁协议 二级封锁协议: 一级封锁协议加上事务T在读取数据R之前必须先对其加S锁, 读完后即可释放 可防止读脏数据, 丢失修改 不能保证可重复读 三级封锁协议: 一级封锁协议加上事务T在读取数据R之前必须先对其加S锁, 直到事务结束才释放 可防止读脏数据, 丢失修改 能保证可重复读 活锁和死锁 封锁可以产生:饥饿,活锁, 死锁 饥饿: 活锁和死锁 封锁可以产生:饥饿,活锁, 死锁 活锁, 死锁: 活锁和死锁 解决死锁问题的方法: 预防和检测 死锁的预防 一次封锁法: 要求事务必须一次将所有要使用的数据全部加锁, 否则不能执行 例如:一次对R1和R2进行加锁 缺点 扩大封锁范围?降低并发度 数据变化?很难确定封锁的数据对象 活锁和死锁 解决死锁问题的方法: 预防和检测 死锁的预防 顺序封锁法: 预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁 例如:B树上的逐级封锁 缺点 封锁的数据对象多,插、删频繁?很难保序,代价大 动态封锁请求?难以预料要封锁哪些对象?很难保序 死锁的检测/诊断与解除 死锁的诊断和解除: DBMS常用方法, 有超时法和事务等待图法 超时法: 如果一个事务等待的时间超过了规定的时间, 就认为发生了死锁 缺点: 可能误诊, 规定时间不好设 优点: 简单 等待图法: 是一有向图G=(T, U). 节点表示正在执行的事务, 边表示等待情况 T1?T2: T1等待T2 死锁诊断: 如果图中存在回路, 系统中发生死锁 死锁解除: 选择一个执行代价最小的事务, 将其撤销, 释放锁 并发调度的可串行性 对并发事务的调度是随机的 ?结果可能不同 ?哪个结果是正确的 合法的数据库状态?正确的结果 串行的事务?合法的数据库状态 事务的串行执行: 串行执行一定是正确的 并发事务的不同调度 并发调度的可串行性 可串行化: 多个事务的并发执行是串行的, 当且仅当其结果和这些事务的某一次串行执行的结果相同的 可串行性: 是并发事务正确性准则 正确调度: 给定的一个并发调度, 当且仅当它是可串行化的, 才认为是正确的 确保并发事务执行可串行化的方法: 2PL, 时间戳等 两阶段封锁协议 两段锁协议: 所有事务必须分两个阶段对所要存取的数据项加锁和解锁 在对任何数据进行读写操作之前, 首先申请并获得对该数据项的封锁 在释放一个封锁之后, 事务不再申请和获得任何其他的封锁 可以证明, 若并发执行的所有事务都遵循两段封锁协议, 则

文档评论(0)

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

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

版权声明书
用户编号:5212202040000002

1亿VIP精品文档

相关文档