- 1、本文档共62页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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 =
您可能关注的文档
最近下载
- 2024年河北省继续医学教育公共必修课参考答案.docx VIP
- 2023年高考全国甲卷语文真题(含答案).pdf
- 2024年河北省继续医学教育公共必修课参考答案.pdf VIP
- 3.6 树和喜鹊.ppt VIP
- (四级)综合布线职业技能鉴定备考题库资料大全-上(单选题汇总).pdf
- 12J1 工程做法 天津市建筑标准设计图集(2012版).docx
- 高中化学必修1判断题(含答案).docx VIP
- 2023年中国石油大学(北京)公共课《毛泽东思想和中国特色社会主义理论体系概论》期末试卷B(有答案).docx VIP
- 慢性呼吸系统疾病防治行动实施方案(2023-2025年).pdf
- 2024幼儿园公开招聘简章(模板).pdf
文档评论(0)