第八章-并发控制-《数据库系统概论》概要

上传人:命****币 文档编号:113110488 上传时间:2019-11-08 格式:PPT 页数:89 大小:277KB
返回 下载 相关 举报
第八章-并发控制-《数据库系统概论》概要_第1页
第1页 / 共89页
第八章-并发控制-《数据库系统概论》概要_第2页
第2页 / 共89页
第八章-并发控制-《数据库系统概论》概要_第3页
第3页 / 共89页
第八章-并发控制-《数据库系统概论》概要_第4页
第4页 / 共89页
第八章-并发控制-《数据库系统概论》概要_第5页
第5页 / 共89页
点击查看更多>>
资源描述

《第八章-并发控制-《数据库系统概论》概要》由会员分享,可在线阅读,更多相关《第八章-并发控制-《数据库系统概论》概要(89页珍藏版)》请在金锄头文库上搜索。

1、数据库原理与应用,第八章 并发控制 数据库系统概论,内容、提纲,CH7.中讲到,为了保证事务的隔离性,需要对多个事务的并发操作进行控制 - 并发控制。 本章介绍的并发控制技术属于事务处理技术。目的是保证事务的隔离性。 事务是数据库恢复和并发控制的基本单位。,8.1 并发控制概述 8.2 封锁 8.3 封锁协议 8.4 活锁和死锁,8.5 并发调度的可串行性 8.6 两段锁协议 8.7 封锁的粒度 8.8 Oracle的并发控制,教学要求,掌握 并发与串行的概念,并发事务的可串行化概念 封锁的类型、封锁类型的相容矩阵 封锁协议的要点和作用 两段封锁协议,两段封锁法与可串行调度之间的关系 了解理解

2、 并发操作带来的数据不一致问题 活锁、死锁及其诊断和解除 数据库并发控制子系统的职责,并发操作:串行执行,数据库是一种共享资源,可供多个用户事务使用。 多用户DBS: 允许多个用户事务同时使用的DBS, 多个用户事务可在同一时刻“并行”运行。 参见P264. 多个用户事务在存取数据库的方式上, 可以: 一个一个地串行执行, 串行存取DB数据; 每个时刻只有一个事务在运行, 它独占系统的全部资源; 如图示,并发操作:并行执行,多个事务并行地存取DB 参见P264. 单处理机系统, 利用分时的方法, 多个事务轮流交叉运行 - 交叉并发方式。 多处理机系统, 多个处理机并行运行, 实现多个事务真正的

3、并行运行 - 同时并发方式。 本章讨论的“并发”是单处理机系统利用分时方法实现多个事务同时并行执行的交叉并发方式。 单处理机中的并行操作是把处理机时间分成一些时间片,并行执行的事务依次轮流获得一个个时间片来运行。宏观上,在一段时间内有多个事务并行执行,但在某一时刻只有一个事务在运行。,单处理机并发操作:图示,T1 T2 T3,三个事务可以是代码一样的程序段,由不同的终端的用户装入运行,是不同的事务。由于处理机的高速性,使每个用户都感觉是在独占系统资源。 数据库技术中事务的并发执行与操作系统中的多道程序设计概念类似。,事务调度,多个事务的执行顺序称为一个“调度”,表示多个事务的指令在系统中执行的

4、时间顺序。 一组事务的调度必须保证 包含了所有事务的操作指令; 一个事务中指令的顺序必须保持不变。 串行调度:多个事务的指令依次执行。 在串行调度中,属于同一事务的指令紧挨在一起 对于有n个事务的事务组,可以有n!个串行调度 每一个串行调度都是有效的, 因为这些事务的执行互不干扰。,事务并发调度,并发调度:多个事务同时被处理(即交错执行) 在并发调度中,来自不同事务的指令是交错的。 并发调度的执行结果可能不正确。因为这些事务的执行可能互相干扰,需要进行控制。 当并发调度执行的结果等于某个串行调度执行的结果时,则该并发调度是正确的。 如何产生正确的并发调度,是由DBMS的并发控制子系统实现的。,

5、串行调度例,两个事务串行调度:,并行(发)调度例,两个事务并行调度:,三个事务并行调度:,8.1 并发控制概述,DBMS并发调度子系统的职责 协调并发事务的执行,保证数据库的一致性不受破坏,同时避免用户得到不正确的数据。 下面以几个例子说明在并发操作下,调度不当会带来数据的不一致性问题。 有三类数据不一致性:参见P265.图8.1 丢失修改(丢失更新) 不可重复读(不一致分析) 读“脏”数据(依赖于未提交的更新),数据不一致性: 丢失修改,丢失修改(丢失更新) 一事务所做的更新操作因另一事务的操作而丢失。两种情况: (1) 一事务所做的更新结果被另一事务的更新结果“冲掉” 。 参见P265.图

6、8.1(a) (2) 一事务所做的更新结果因另一事务的撤消而丢失。,数据不一致性:丢失修改(续1),参见P265.图8.1(a),两个事务T1和T2读入同一数据并修改,T1(T2)提交的结果破坏了T2(T1)提交的结果,导致T2(T1)的修改丢失,数据不一致性:丢失修改(续2),read(A); A := A 50; write(A);,T1,T2,*rollback*,read(A); A := A10 write(A);,这个并发调度中,事务T2读入了未提交的A值, 并由于事务T1撤消,使T2丢失了自己的修改。,数据不一致性: 不可重复读,不可重复读(不一致分析):指事务从数据库中读取了处

7、于不一致状态的数据,并因此进行了不一致的分析。 三种情况: (1) 事务T1读取某一数据后,事务T2对其做了修改, 当T1再次读取该数据时, 得到与前一次不同的值。参见P265.图8.1(b),数据不一致性: 不可重复读(续),参见P266. (2) 事务T1按一定条件从数据库中读取某些数据记录后,事务T2删除了其中部分记录,当T1再次按相同条件读取数据时,发现某些记录消失了。 (3) 事务T1按一定条件从数据库中读取某些数据记录后,事务T2插入了一些记录,当T1再次按相同条件读取数据时,发现多了一些记录。 后两种不可重复读也称为幻影现象。,数据不一致性: 读脏数据,读“脏”数据(依赖于未提交

8、更新):指一事务取用了别的事务未提交随后又被撤消的数据。 参见P266. 在数据库技术中, 把未提交随后又被撤消的数据称为“脏”数据。,数据不一致性: 读脏数据例,事务T1修改某一数据并将其写回, 但未提交, 事务T2读取同一数据后, T1由于某种原因被撤消,这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,则T2读到的数据就是“脏”数据。,参见P265.图8.1(c),并发控制的技术:封锁,产生上述三类数据不一致性的主要原因是并发操作破坏了事务的隔离性。 并发控制就是要用正确的方式调度并发操作,使一个用户事务的执行不受其他事务的干扰,从而避免数据的不一致性,保证事务的隔

9、离性,保证数据库的一致性。 并发控制有两种技术:封锁(Locking)技术和时标(Times-tamping)技术,大多数DBMS采用封锁技术。,8.2 封锁(Locking),封锁是实现并发控制的一个非常重要的技术。 封锁: 是指事务向系统发出对某数据对象加锁的请求,以取得对该对象一定的控制权。,如,事务T: 要操作数据对象R ,确切的控制由封锁的类型决定。, T释放R上的锁,其他事务可请求加锁R,封锁的类型: X锁,基本的封锁类型 参见P266.267. 排它锁(Exclusive Locks,简称X锁,又称写锁 ) 共享锁(Share Locks,简称S锁,又称读锁) X封锁:若一个事务

10、T对数据对象A加上X锁,则只允许T读取和修改A,在T释放A上的X锁之前不允许其他事务再对该数据对象A加任何类型的锁,即其他事务不能读写数据对象A。 欲修改(写)数据A,必须先对A加X锁 X锁是写锁,写操作是排它的,排它的写,封锁的类型: S锁,参见P266.267. S封锁:若一个事务T对数据对象A加上S锁,则事务T可以读取A但不能修改A,允许其他事务再对该数据对象A加S锁,但在T释放A上的S锁之前不允许其他事务对A加X锁。 欲读取数据A,先对A加S锁 S锁是读锁,读操作是共享的,共享的读,排它锁和共享锁的相容矩阵,参见P267.图8.2 封锁类型的相容矩阵,X 表示X封锁 S 表示S封锁 -

11、 表示不加任何锁 Y 表示相容的请求 N 表示不相容的请求,若两个封锁是不相容的, 则后提出封锁的事务要等待 申请对数据R加X锁 - Xlock R 申请对数据R加S锁 - Slock R,8.3 封锁协议,对锁的操作有:加锁、升级和释放(解锁)。 X锁和S锁具有不同性质,但锁本身并未规定事务存取数据库时必须进行锁操作。 封锁协议规定了事务何时必须进行锁操作和进行怎样的锁操作,即规定了事务存取数据库时必须进行的锁操作。 DBMS不但要有专门的子系统执行锁操作,而且要有监督事务遵守封锁协议的功能。 封锁机制是通过封锁类型、封锁协议和有关的子系统来实现的。,封锁协议,封锁协议:在运用X锁和S锁对数

12、据对象加锁时,还需要约定一些规则,要求并发执行的事务共同遵守。对封锁方式规定不同的规则,就形成了各种不同的封锁协议。 保证事务一致性的封锁协议 一级封锁协议 参见P267.268. 二级封锁协议 参见P268. 三级封锁协议 参见P268.,保证事务一致性的封锁协议:一级,一级封锁协议:事务T在修改数据R之前必须先对其加X锁,直至事务结束才释放。事务结束包括提交和回滚。 一级封锁协议可以防止丢失修改,并保证事务是可恢复的。,参见P269.图8.3 (a)没有丢失修改,一级封锁协议:例1,在一级封锁协议中,如果仅仅是读数据,不对其进行修改,是不需要加锁的,所以它不能保证可重复读和不读“脏”数据。

13、,例: 不可重复读,一级封锁协议:例2,在一级封锁协议中,如果仅仅是读数据,不对其进行修改,是不需要加锁的,所以它不能保证可重复读和不读“脏”数据。,例: 读“脏”数据,保证事务一致性的封锁协议:二级,二级封锁协议:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。 二级封锁协议可以防止丢失修改,还可进一步防止读“脏”数据。 例:参见P269.图8.3(C ) 不读“脏”数据,二级封锁协议:例,在二级封锁协议中, 由于读完数据后即释放S锁,所以它不能保证可重复读。,保证事务一致性的封锁协议:三级,三级封锁协议:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直

14、到事务结束才释放锁。 三级封锁协议除防止了丢失修改和不读“脏”数据外,还进一步防止了不可重复读。 例:参见P269.图8.3 (b)可重复读 图8.3(C )不读“脏”数据,保证事务一致性的封锁协议,三个级别封锁协议的主要区别: 什么操作需要申请封锁、申请什么封锁; 何时释放锁(持锁时间)、及数据一致性的保证。 P269.表8.1, 不同级别的封锁协议与数据一致性保证,8.4 活锁和死锁,恰当地运用封锁技术,可以有效地避免数据不一致,但有可能引起其他问题:活锁和死锁。 活锁 出现某个事务永远处于等待状态,得不到封锁的机会,这种现象称为活锁(Live Lock)。 例如,P270.图8.4(a)

15、的活锁现象,事务T2永远等待。,活锁的避免,避免活锁的简单方法是采用“先来先服务”排队的策略。 参见P270. 当多个事务请求封锁同一数据对象时,封锁子系统按请求封锁的先后次序对事务排队,数据对象上的锁一旦释放就批准申请队列的第1个事务获得锁。 如果事务有优先级,那么很可能优先级低的事务即使排队也很难轮上封锁的机会。此时可采用锁“升级”方法来解决,也就是当一个事务等待若干时间(比如5分钟)还轮不上封锁时,可以提高其优先级,这样总能轮上获得封锁。,死锁(参见P270.271.),出现两个或两个以上的事务都处于等待状态,并且每个事务都在等待其中另一个事务解除封锁,它才能继续执行下去,结果造成任何一

16、个事务都无法继续执行,这种现象称为系统进入了“死锁”(Dead Lock)状态。 例如,参见P270.图8.4(b),事务T1和T2各自封锁了一些数据对象,又请求封锁对方已加锁的数据对象,造成互相等待,永远不能结束的局面。,死锁的解除,数据库中解除死锁的两类方法: 1. 死锁的预防:采取一定措施预防死锁的发生。 2. 诊断解锁:允许死锁发生,采取一定手段定期诊断系统中有无死锁,有则解除之。,死锁的预防:一次封锁法,防止死锁的发生,破坏产生死锁的条件, 两法: (1) 一次封锁法 参见P271. 要求所有事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。 例如,P270.图8.4(b)中, 如果事务T1和T2将数据对象R1和R2一次加锁, 这样就不会发生死锁。如事务T1 : “锁R1, R2;读写R2, R2;解锁R1, R2;” 一次封锁法可以有效地防止死锁,但会扩大封锁范围,降低系统的并发度。,死锁的预防:顺序封锁法,(2)

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号