第11章并发控制.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
An Introduction to Database System 数据库系统概论 第11章 并发控制 回顾:事务 (Transaction) 事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。例如银行转帐等应用。 事务的ACID特性: 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持续性(Durability ) 续 仅仅定义“事务”足够了吗? 能够满足数据库处理的所有要求吗? 请看下面的例子: 正确的应该是共卖出5张票,A应该是11,可上式中是14; 因此:T1的修改被T2覆盖了! 错误1: 丢失修改 丢失修改是指事务1与事务2从数据库中读入同一数据并修改; 事务2的提交结果破坏了事务1提交的结果,导致事务1的修改被丢失。 其过程可用下图表示: “丢失修改”错误示意图 例2:数据核对系统 错误2: 不可重复读 不可重复读是指事务2读取数据后,事务1执行更新操作,使事务2无法再现前一次读取结果。 可用下图表示: “不可重复读”错误示意图 “不可重复读”错误种类 事务2读取某一数据后: 1.事务1对其做了修改,当事务2再次读该数据时,得到与前一次不同的值。 2. 事务1删除了其中部分记录,当事务2再次读取数据时,发现某些记录神密地消失了。 3. 事务1插入了一些记录,当事务2再次按相同条件读取数据时,发现多了一些记录。 后两种不可重复读有时也称为幻影现象(phantom row) 幻影 例3:利息计算 错误3:读“脏”数据 事务1修改某一数据,并将其写回磁盘; 事务2读取同一数据后,事务1由于某种原因被撤消,这时事务1把已修改过的数据恢复原值; 事务2上次读到的数据就与数据库中目前的数据不一致,是不正确的数据,称之为“脏”数据。 “读脏数据”错误示意图 并发操作带来的数据不一致性种类 丢失修改(lost update) 不可重复读(non-repeatable read) 读“脏”数据(dirty read) 单事务与多事务 因此,可以认为: 如果事务是串行执行的,即:A事务完全执行完毕后,B事务才开始执行,则不会出现错误; 否则,可能会出现前面描述的错误,如破坏事务的隔离性和数据库的一致性 。 那为何还要使用多事务呢? 并行 VS 串行(1) 事务串行执行:每个时刻只有一个事务运行,其他事务必须等到这个事务结束以后方能运行 事务并发执行:来自不同事务的指令可以交叉执行 交叉并发方式(interleaved concurrency):是单处理机系统中的并发方式 同时并发方式(simultaneous concurrency) :是多处理机系统中的并发方式 并行 VS 串行(2) 基本比较 并行事务可能会破坏数据库的一致性 串行事务效率低 并行的优点 一个事务由不同的步骤组成,所涉及的系统资源也不同。这些步骤可以并发执行,以提高系统的吞吐量 系统中存在着周期不等的各种事务,串行会导致难于预测的时延。如果各个事务所涉及的是数据库的不同部分,采用并发会减少平均响应时间 核心问题:在保证一致性的前提下最大限度地提高并发度 11.2 解决之道:封锁 一、什么是封锁 二、基本封锁类型 三、基本锁的相容矩阵 一、什么是封锁 封锁就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁; 加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。 封锁是实现并发控制的一个非常重要的技术。 二、封锁的类型 DBMS通常提供了多种类型的封锁。一个事务对某个数据对象加锁后究竟拥有什么样的控制是由封锁的类型决定的。 基本封锁类型 排它锁(eXclusive lock,简记为X锁) 共享锁(Share lock,简记为S锁) 排它锁 排它锁又称为写锁; 若事务T对数据对象A加上X锁,则只允许T读取和修改A;其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁; 共享锁 共享锁又称为读锁; 若事务T对数据对象A加上S锁,只允许事务T对该对象A进行读而不能进行写;其它任何事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。 三、锁的相容矩阵 如何使用锁? 使用锁的过程中遵循的法则:封锁协议 11.3 封锁协议 封锁协议(Locking Protocol): 在运用X锁和S锁对数据对象加锁时,约定一些规则,包括: 何时申请 何种类型锁 何时释放 常用的封锁协议:三级封锁协议 不同的封锁协议,在不同的程度上为并发操 作的正确调度提供一定的保证 一级封锁协议 事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放 正常结束(COMMIT) 非正常结束(ROLLB

文档评论(0)

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

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

1亿VIP精品文档

相关文档