第16章并发控制.ppt

  1. 1、本文档共55页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第16章: 并发控制 基于锁的协议 基于锁的协议 (续) 基于锁的协议 (续) 基于锁的协议的陷阱 基于锁的协议的陷阱(续) 两阶段锁协议 两阶段锁协议 (续) 两阶段锁协议 (续) 锁转换 锁的自动获得 锁的自动获得 (续) 锁的实现 锁管理器可实现为单独的进程, 事务向它发送加锁与释放锁请求 锁管理器通过发送锁授予消息来回答锁请求(或死锁时发送请事务回滚的消息) 请求事务等待, 直至它的请求被回答 锁管理器维护一个称为锁表的数据结构来记录授予的锁和挂起的请求 锁表通常实现为以被锁数据项的名字为索引的内存散列表 锁表 黑色矩形表示已授予的锁, 白色矩形表示等待的请求 锁表也记录授予或请求的锁的类型 新请求加入到对某数据项的请求队列的末尾, 并且如果与所有以前的锁兼容则被授予 释放锁请求导致请求被删除, 并且其后的请求被检查看看现在是否可以授予 如果事务夭折, 则该事务的所有等待或已批准的请求都被删除 锁管理器可能保存每个事务持有的锁的列表, 以便对此高效地实现 基于图的协议 树协议 基于图的协议 (续) 基于时间戳的协议 基于时间戳的协议(续) 基于时间戳的协议(续) 协议用例 时间戳排序协议的正确性 可恢复性与避免级联回滚 Thomas写规则 基于有效性检查的协议 基于有效性检查的协议 (续) 事务Tj 的有效性检查 有效性检查所产生的调度 多粒度 粒度层次例 意向锁方式 意向锁方式的兼容性矩阵 多粒度锁方案 多版本方案 多版本时间戳序 多版本时间戳序(续) 多版本两阶段封锁 多版本两阶段封锁(续) 死锁处理 死锁处理 更多死锁预防策略 死锁预防(续) 死锁检测 死锁检测(续) 死锁恢复 插入与删除操作 插入与删除操作(续) 索引封锁协议 弱一致性级别 使用不能确保可串行性但能改善性能的其他一致性概念. 二级一致性:避免级联中止但不必确保可串行性. 不同于两阶段封锁的是, S锁可以随时释放, 并且锁可以在任何时候获得 X锁必须保持到事务结束(提交或中止) 不能保证可串行化, 程序员必须确保不会发生错误的数据库状态 二级一致性的调度例 游标稳定性 SQL中的弱一致性级别 SQL允许非可串行化的执行 可串行化: 默认级别 可重复读: 只允许读已提交记录, 并且事务中的重复读应返回相同的值(因此读锁应该保持) 然而, 不需要防止幻影现象 T1 可以看到T2插入的某些记录, 但可能看不到T2插入的另一些记录 读已提交: 与二级一致性相同, 但是多数系统将它实现为游标稳定性 读未提交: 允许读到未提交数据 索引结构中的并发 索引结构中的并发(续) End of Chapter 除了S 和X 锁方式, 还有另外三种多粒度的锁方式: 意向共享 (IS): 表示在树的低层有显式加共享锁. 意向排他 (IX):表示在树的低层有显式加排他或共享锁 共享及意向排他 (SIX): 以该节点为根的子树被显式加共享锁, 并且在子树的低层显式加排他锁. 意向锁允许高层节点按S或X方式加锁而不需检查所有后裔节点. 对所有锁方式的兼容性矩阵如下: IS IX S S IX X IS IX S S IX X ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 事务Ti 可以根据下列规则来锁一个节点Q: 1. 必须遵守锁兼容性矩阵. 2. 树的根必须首先加锁, 并且可以任何方式加锁. 3. 仅当节点Q 的父节点当前被Ti 以IX或IS方式加锁时, Q 才可被Ti 以S或IS方式加锁. 4. 仅当节点Q 的父节点当前被Ti 以IX或SIX方式加锁时, Q 才可以被Ti 以X, SIX, 或IX方式加锁. 5. 仅当Ti 先前没有对任何节点开锁时才可以对一个节点加锁(即, Ti 是两阶段的). 6. 仅当Q 的子女没有正被Ti 加锁时, Ti 才可以对节点Q 开锁. 注意锁是按从根到叶次序获得的, 但是按从叶到根次序释放的. 多版本方案保存数据项的老版本以增加并发性. 多版本时间戳序 多版本两阶段锁 每个成功的write导致创建所写数据项的一个新版本. 用时间戳标记版本. 当发出read(Q) 操作时, 基于事务的时间戳来选择Q 的合适版本, 并返回所选版本的值. read 永远不必等待, 可以立即返回一个合适的版本. 每个数据项Q 具有一系列版本Q1, Q2,...., Qm. 每个版本Qk 包含三个数据字段: 内容 – 版本Qk 的值. W-timestamp(Qk) – 创建(写)版本Qk 的事务的时间戳 R-timestamp(Qk) – 成功读取版本Qk 的事务的最大时间戳 当事务Ti 创建Q 的一个新版本Qk 时, Qk的W-timestamp 与R-timestamp

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档