事务和并发控制概要.ppt

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

锁 读锁和写锁 目的:提高并发度 支持多个并发事务同时读取某个对象 允许一个事务写对象 事务的操作冲突规则 如果事务T已经对某个对象进行了读操作,那么并发事务U在事务T提交或放弃前不能写该对象。 如果事务T已经对某个对象进行了写操作,那么并发事务U在事务T提交或放弃前不能写或读该对象。 读锁和写锁的相容性 锁 对某一对象 被请求的锁 read write 已设置的锁 none OK OK read OK write 等待 等待 等待 锁 一阶段加锁可以避免更新丢失问题 两阶段加锁可以避免更新丢失和读”脏“数据问题 严格两阶段加锁可以避免更新丢失、读”脏“数据和不可重复读取问题 锁 嵌套事务的加锁需求 嵌套事务集   - 要求:不能观察到其它嵌套事务集的部分效果   - 实现方法:父事务继承子事务的所有锁,锁的继承从底层向高层传递。 嵌套事务集中的事务 - 要求:不能观察到同一事务集中其它事务的部分效果。   - 实现方法:父事务不允许和子事务并发运行;同层次的事务可并发执行。 锁 嵌套事务的加锁规则(一) 获得读锁   如果子事务获取了某个对象的读锁,那么其它活动事务不能获取该对象的写锁,只有该子事务的父事务们可以持有该写锁。 获得写锁   如果子事务获取了某个对象的写锁,那么其它活动事务不能获取该对象的写锁或读锁,只有该子事务的父事务们可以持有该写锁或读锁。 锁 嵌套事务的加锁规则(二) 提交   子事务提交时,它的所有锁由父事务继承,即允许父事务保留与子事务相同模式的锁。 放弃   子事务放弃时,它的所有锁都被丢弃。如果父事务已经保留了这些锁,那么它可以继续保持这些锁。 锁 死锁(一) 死锁场景示例  两个事务都在等待并且只有对方释放锁后才能继续执行 事务T 事务U 操作 锁 操作 锁 a.deposit(100); 给A加锁 b.deposit(200) 给B加写锁 b.withdraw(100) 等待事务U a.withdraw(200); 等待事务T 在B上的锁 在A上的锁 锁 死锁(二) 定义  死锁是一种状态,在该状态下一组事务中的每一个事务都在等待其它事务释放某个锁。 等待图  表示事务之间的等待关系。 B A 等待 持有 持有 T U U T 等待 锁:解决死锁问题,一靠预防,二允许发生死锁,再定期诊断 预防死锁 每个事务在开始运行时锁住它要访问的所有对象  - 一个简单的原子操作   - 不必要的资源访问限制 -无法预计事务将访问哪些对象 锁 死锁检测 维护等待图 检测等待图中是否存在环路 若存在环路,则选择放弃一个事务 锁超时:解除死锁最常用的方法之一 每个锁都有一个时间期限 超过时间期限的锁成为可剥夺锁 若存在等待可剥夺锁保护的对象,则对象解锁。 第5章 事务和并发控制 事务 锁 乐观并发控制 时间戳排序 并发控制方法的比较 小结 乐观并发控制 锁机制的缺点 维护开销大 会引起死锁 并发度低 乐观策略 基于事实:在大多数应用中,两个客户事务访问同一个对象的可能性很低。 方法 - 访问对象时不作检查操作   - 事务提交时检测冲突   - 若存在冲突,则放弃一些事务 乐观并发控制 事务的三个阶段 工作阶段  - 每个事务拥有所修改对象的临时版本 - 每个事务维护访问对象的两个集合:读集合和写集合 验证阶段 - 在收到closeTransaction请求,判断是否与其它事务存在冲突。 更新阶段 - 提交通过验证的事务 乐观并发控制 事务的验证 事务号  - 每个事务在进入验证阶段前被赋予一个事务号 - 事务号是整数,并按升序分配  - 事务按事务号顺序进入验证阶段 - 事务按事务号提交 冲突规则  - 事务Tv的验证测试  - Ti和Tv之间的存在冲突 - 事务Tv对事务Ti而言是可串行化的 乐观并发控制 Tv Ti 规则 write read 1. Ti不能读取Tv写的对象 read write 2. Tv不能读取Ti写的对象 write write 3. Ti不能写Tv写的对象, 并且Tv不能写Ti写的对象 与事务的工作阶段相比,由于验证和更新过程较短, 每次仅允许一个事务处于验证和更新阶段。 乐观并发控制 向后验证 检查它的读集是否和其它较早重叠事务的写集是否重叠 算法  - startTn: Tv进入工作阶段时已分配的最大事务号码  - finishTn: Tv进入验证阶段时已分配的最大事务号码 验证失败后,冲突解决方法   放弃当前进行验证的事务 Boolean valid = true For ( int Ti =

文档评论(0)

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

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

1亿VIP精品文档

相关文档