数据库教学课件:第7章 事务.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * * * * * * * * * * * 调度例 (Schedule A) T1 T2 T3 T4 T5 read(X) read(Y) read(Z) read(V) read(W) read(W) read(Y) write(Y) write(Z) read(U) read(Y) write(Y) read(Z) write(Z) read(U) write(U) Schedule A的优先图 T3 T4 T1 T2 T5 检测冲突可串行化 一个调度是冲突可串行化的当且仅当它的优先图是无圈的 存在时间复杂度阶为n2的循环检测算法, 其中n 是图中顶点数(更好的算法阶为n + e, 其中e 为边数) 如果优先图是无圈的, 可由该图的一个拓扑序得到可串行化序,即与图的偏序一致的线性序 例如, Schedule A的一个可串行化序可以是 T5 ? T1 ? T3 ? T2 ? T4 拓扑排序示意图 检测观察可串行化 对冲突可串行化的优先图检测必须经过修改才可用于检测观察可串行化 检测一个调度是否观察可串行化的问题属于NP-complete问题类, 因此不大可能存在一个高效算法 但是仅检测观察可串行化的某些充分条件的实用算法仍可用 并发控制 vs. 可串行化检测 在调度已经执行之后再来检测它的可串行化太迟了! 目标: 开发能确保可串行化的并发控制协议 一般不检查优先图; 而是由协议施加约束来避免非可串行化调度 我们将在第8章学习这些协议 检测可串行化有助于理解为什么一个并发控制协议是正确的 End of Chapter * * * * * * * * * * * * * * * * * * * * * * * * * ?Silberschatz, Korth and Sudarshan 15.* Database System Concepts Chapter 7 事务 本章内容参考: 数据库概念(第四版) by A. Silberschatz Chapter 15 Transactions 补充内容 本章内容特色: 以介绍(事务的)概念为重点 以建立事务模型为目标 为并发处理和恢复作准备 概念不难理解,但实现细节很复杂 本章要解决的关键问题: 理解事务处理中面临的主要矛盾及其解决方法 主要内容 事务概念 事务状态 原子性与持久性的实现 并发执行 可串行性 可恢复性 隔离性的实现 SQL中事务的定义 检测可串行性 事务概念 事务是程序的逻辑运行单位 事务必须保持数据库的一致性 在事务执行过程中, 数据库可能处于不一致状态 当事务结束时, 数据库必须处于一致状态 要处理两个问题: 各种故障, 如硬件故障和系统崩溃 多个事务的并发执行 “多快”和”好省”的矛盾 ACID 性质(10/19) Atomicity:事务的操作要么完全执行, 要么全不做(ALL OR NOTHING) Consistency:在隔离状态下事务的执行保持数据库的一致性 Isolation:尽管多个事务可以并发执行, 每个事务必须不了解其他并发执行的事务,事务的中间结果对其他并发事务是不可见的 Durability:事务成功结束后, 对数据库所做的更新将永久化, 即使再发生系统故障也不受影响 记忆方法:”原致孤久” 另一记忆法ACID (酸的,刻薄) 为保持数据一致性, 数据库系统必须确保: 转账例 从账户A 转移$50到账户B: 1. read(A) 2. A := A – 50 3. write(A) 4. read(B) 5. B := B + 50 write(B) 一致性要求 – 事务执行前后 A 与 B 之和保持不变 原子性要求 – 若事务在第3步之后及第6步之前失败, 系统应确保事务所做更新不被反映到数据库中, 否则会出现不一致 转账例 持久性要求 — 一旦用户被告知事务已经完成 (即, $50 转账已经发生), 则即使发生故障, 事务对数据库的更新也必须持久化 隔离性要求 — 若在第3步与第6步之间允许另一事务存取部分更新的数据库, 该事务将看到不一致的数据库(A + B 小于正确值) 可通过串行(即一个接一个)执行事务来确保隔离性,但是并发执行多个事务具有很多好处 事务状态(10/29) Active: 初始状态,事务执行时处于此状态 Partially committed: 最后一条语句执行之后 Failed: 发现不能继续正常执行之后进入该状态 Aborted: 事务已回滚并且数据库已恢复到事务开始前的状态之后,此后有两种选择: 重启事务 – 仅当非内部逻辑错误时 杀死事务 Committe

文档评论(0)

学习让人进步 + 关注
实名认证
文档贡献者

活到老,学到老!知识无价!

1亿VIP精品文档

相关文档