上海交通大学 高级数据库 课件 陆朝俊ed6ch15概要1.ppt

上海交通大学 高级数据库 课件 陆朝俊ed6ch15概要1.ppt

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

第15章 并发控制 基于锁的协议 基于锁的协议 (续) 过早释放锁不能保证可串行化 推迟释放锁 死锁 饿死 两阶段封锁协议 两阶段封锁协议 (续) 两阶段封锁协议 (续) 锁转换 锁转换调度例 封锁指令的自动生成 封锁指令的自动生成(续) 基于图的协议 树协议 树协议 (续) 死锁处理 死锁处理 死锁预防策略 基于超时的方案 死锁检测 死锁检测 (续) 死锁恢复 多粒度 粒度层次例 意向锁方式 含意向锁方式的相容矩阵 多粒度封锁协议 基于时间戳的协议 基于时间戳的协议 (续) 协议使用例 时间戳序协议的正确性 可恢复性与无级联回滚 Thomas Write规则 基于有效性检查的协议 基于有效性检查的协议(续) 事务Tj 的有效性检查 有效性检查产生的调度 多版本方案 多版本时间戳序 多版本时间戳序 (续) 多版本两阶段封锁 多版本两阶段封锁 (续) 快照隔离 更新事务的有效性检验 更新事务的有效性检验(续) 快照隔离不能保证可串行化 快照隔离不能保证可串行化(续) 插入与删除操作 插入与删除操作 (续) 插入与删除操作 (续) 弱一致性级别 可串行化概念使程序员只管编写独自运行时正确的程序即可, 无需关心并发问题. 但为了确保可串行化, 协议可能只允许较低的并发度. 在某些应用中, 可以牺牲可串行化要求以提高并发度. 但确保数据库的一致性成了程序员的负担. 二级(Degree-two)一致性: 目的是避免级联中止. 同2PL一样, 使用S锁和X锁; 不同于2PL的是, S锁可以随时释放, 并且可在任何时候获得锁; X锁必须保持到事务结束(提交或中止); 不能保证可串行化.如:不可重复读. 游标稳定性: 为使用游标的宿主语言程序而设计. 不是锁整个关系, 而只对游标当前处理的元组加S锁, 读完即释放; 对更新的元组加X锁, 并保持到事务提交; 是二级一致性的一种. 用于被频繁存取的关系, 可提高并发度,改善系统性能. End 时间戳序协议确保任何冲突的read 和write操作按时间戳序执行. 假设事务Ti 发出read(Q) 若TS(Ti) W-timestamp(Q), 则Ti 需要读的Q的值已经被写覆盖. 因此, read 操作被拒绝, Ti 回滚. 若TS(Ti) ? W-timestamp(Q), 则执行read操作, 并将R-timestamp(Q) 置为max(R-timestamp(Q), TS(Ti )). 假设事务Ti 发出write(Q) 若TS(Ti) R-timestamp(Q), 则Ti 要产生的Q 值是过去需要的, 而系统假设该值永远不会产生了. 于是, write 操作被拒绝, Ti 回滚. 若TS(Ti) W-timestamp(Q), 则Ti 试图写一个过时的Q 值. 因此, 这个write 操作被拒绝, Ti 回滚. 否则, 执行write操作, 且将W-timestamp(Q) 置为TS(Ti). 事务回滚后被赋予新的时间戳, 并重新启动. 以下是具有时间戳1, 2, 3, 4, 5 的五个事务的一个部分调度 T1 T2 T3 T4 T5 read(Y) read(X) read(Y) write(Y) write(Z) read(Z) read(Z) abort read(X) write(Z) abort write(Y) write(Z) 时间戳排序协议确保了冲突可串行化, 因为优先图中的所有边都形如: 因此, 优先图中没有圈. 存在2PL协议能产生而时间戳序协议不能产生的调度, 反之亦然. 时间戳协议确保不会死锁, 因为没有事务会等待. 长事务可能饿死: 一系列冲突的短事务导致该长事务反复回滚. 可能导致不可恢复调度(见下slide). 较小时间戳 事务 较大时间戳 事务 时间戳序协议的问题: 假如Ti 中止, 但Tj 已经读了Ti 所写的一个数据项, 则Tj 必须中止; 进一步, 任何读了Tj 所写的数据项的事务必须中止. 这导致级联回滚. 若Tj 已被允许较早提交, 则该调度不可恢复. 解决方法1: 确保可恢复性与无级联回滚性. 在事务结束时一起执行所有写操作. 事务的所有写操作构成一个原子动作: 执行写时, 其他事务不能访问被写数据. 解决方法2: 确保可恢复性与无级联回滚性. 使用一种受限形式的封锁: 对未提交数据的读操作被推迟到更新该数据的事务提交之后. 解决方法3: 确保可恢复性. 跟踪未提交写操作 若Tj 读了Ti 所写数据, 则Tj 必须等Ti 提交之后才能提交. 利用提交依赖 是时间戳序协议的修改版: 某些过时write操作可忽略. 针对read操作的规则与时间戳序协议相同. Tho

文档评论(0)

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

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

1亿VIP精品文档

相关文档