第9章 并发控制ppt课件.ppt

上传人:春哥&#****71; 文档编号:16977715 上传时间:2022-05-20 格式:PPT 页数:48 大小:2.22MB
返回 下载 相关 举报
第9章 并发控制ppt课件.ppt_第1页
第1页 / 共48页
第9章 并发控制ppt课件.ppt_第2页
第2页 / 共48页
点击查看更多>>
资源描述

《第9章 并发控制ppt课件.ppt》由会员分享,可在线阅读,更多相关《第9章 并发控制ppt课件.ppt(48页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第第9 9章章 并发控制并发控制本章导读本章导读v 主要内容主要内容 介绍数据库并发控制的基本概念(并发控制、封锁、封锁协议、活锁、死锁、可串行化的调度、封锁粒度、意向锁)和实现技术机制。v 学习目标学习目标(1)理解3类数据不一致性问题与三级封锁协议的关联;(2)掌握活锁和死锁的预防措施;(3)掌握可串行化的调度和两段锁的基本应用。9.1 并发控制概述并发控制概述9.1.1 并发控制的概念并发控制的概念v当数据库中有多个事务并发执行时,由于事务之间操作的相互干扰,事务的隔离性不一定能保持,从而导致对数据库一致性潜在的破坏。为保持事务的隔离性,系统必须对并发事务之间的相互作用加以控制,这称为并

2、发控制并发控制。9.1 并发控制概述并发控制概述数据不一致问题数据不一致问题v 并发操作带来的数据不一致性主要包括3类:丢失修改、不可重复读和读“脏”数据。以火车订票系统为例,列出了3种数据不一致问题情况,如图9-1所示。9.1 并发控制概述并发控制概述图图9-1 3种数据不一致问题的实例种数据不一致问题的实例1 1丢失修改丢失修改 在并发操作情况下,对T1、T2事务的操作序列的调度是随机的,T2事务修改A并写回后覆盖覆盖了T1事务的修改,所以T1事务的修改被丢失,如图9-1(a)所示。9.1 并发控制概述并发控制概述2 2不可重复读不可重复读 事务T1读取某一数据后,事务T2对其做了修改,当

3、T1再次读取该数据时,得到与前次不同的值,即不可重复读,如图9-1(b)所示。 9.1 并发控制概述并发控制概述3 3读读“脏脏”数据数据 T1由于某种原因对数据恢复成原值,此时T2 读到的数据就与数据库中的数据不一致,则T2 读到的数据为“脏”数据,如图9-1(c)所示。9.1 并发控制概述并发控制概述v产生上述3类数据不一致的主要原因是并发操作并没有保证事务的隔离性。并发控制就是要用正确正确的方式调度的方式调度并发操作,使一个用户事务的执行不受其他事务的干扰,从而避免造成数据的不一致性。9.1 并发控制概述并发控制概述9.2封封 锁锁v封锁机制是并发控制的重要手段。所谓封锁封锁是使事务对它

4、要操作的数据有一定的控制权控制权。v封锁通常包含3环节:申请加锁、获得锁以及释放锁申请加锁、获得锁以及释放锁。(1)事务T在对某个数据对象操作之前,先向系统发出加锁请求;(2)加锁后事务T就获得对该数据对象的控制权;(3)只有事务T释放该锁,其他的事务才能更新此数据对象。v为了达到封锁的目的,事务在使用时应选择合适的锁,并遵循一定的封锁协议。9.2.1 9.2.1 封锁类型封锁类型v最基本的封锁类型有两种:排它锁排它锁(Exclusive Locks,简称X锁)和共享锁共享锁(Share Locks,简称S锁)。9.2封封 锁锁1 1排排它它锁锁(写锁写锁)v若事务T对数据对象A加上X X锁锁

5、,则只允许T读取和修改A,其他任何事务既不能读取和修改A,也不能再对A加任何类型的锁,直到T释放A上的锁。申请对A的排它锁,可以表示为Xlock(A)。9.2封封 锁锁2 2共享锁共享锁(读锁读锁)v若事务T对数据对象A加上S S锁锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。申请对A的共享锁,可以表示为Slock(A)。9.2封封 锁锁9.2封封 锁锁封锁协议封锁协议 只对数据对象加锁,并不能保证事务的一致性,还需要约定一些规则规则。例如,何时申请X锁或S锁、持锁时间、何

6、时释放等,这些规则称为封锁协议封锁协议(Locking Protocol)。对封锁方式规定不同的规则,就形成了各种不同的封锁协议。 封锁协议可分为三级,各级封锁协议对并发操作带来的丢失修改、不可重复读和读“脏”数据等不一致问题,可以在不同程度上予以解决。9.2封封 锁锁 表表9-1 不同级别的封锁协议不同级别的封锁协议9.2封封 锁锁图图9-2 用封锁机制解决用封锁机制解决3种数据不一致问题的实例种数据不一致问题的实例9.3 活锁和死锁活锁和死锁v封锁技术可以有效地解决并行操作的一致性问题,但也带来一些新的问题: 死锁 活锁9.3 活锁和死锁活锁和死锁1.活锁活锁表表9-2 活锁的情形活锁的情

7、形v避免活锁:采用先来先服务的策略避免活锁:采用先来先服务的策略 当多个事务请求封锁同一数据对象时当多个事务请求封锁同一数据对象时 按请求封锁的先后次序对这些事务排队按请求封锁的先后次序对这些事务排队 该数据对象上的锁一旦释放,首先批准申请队该数据对象上的锁一旦释放,首先批准申请队列中第一个事务获得锁列中第一个事务获得锁9.3 活锁和死锁活锁和死锁T1T2lock R1Lock R2Lock R2.等待等待等待等待Lock R1等待等待等待等待等待等待等待等待2.2.死锁死锁表表9-3 死锁的情形死锁的情形9.3 活锁和死锁活锁和死锁v解决死锁的方法:解决死锁的方法:(1 1)预防死锁(一次封

8、锁法、顺序封锁法)预防死锁(一次封锁法、顺序封锁法)(2 2)死锁的诊断与解除(超时法、事务等待图法)死锁的诊断与解除(超时法、事务等待图法)9.3 活锁和死锁活锁和死锁表表9-4 解决死锁方法的对比解决死锁方法的对比9.3 活锁和死锁活锁和死锁9.4 并发调度的可串行性并发调度的可串行性v计算机系统对并发事务中并发操作的调度是随机的,而不同的调度可能会产生不同的结果,那么哪个结果是正确的呢?v如果一个事务的运行没有受到其他事务的干扰,就可以认为该事务的运行结果是正常的或者预想的。事务串行执行的顺序不同可能会产生不同的结果,但由于不会将数据库置于不一致状态,那么所有事务串行起来的调度策略都是正

9、确的调度策略。9.4 并发调度的可串行性并发调度的可串行性v可串行化可串行化(Serializable)调度调度n多个事务的并发执行是正确的,当且仅当其多个事务的并发执行是正确的,当且仅当其结果与按某一次序结果与按某一次序串行串行地执行这些事务时的地执行这些事务时的结果相同。结果相同。v可串行性可串行性(Serializability) 是并发事务正确调度的准则;是并发事务正确调度的准则; 一个给定的并发调度,当且仅当它是可串行一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度。化的,才认为是正确调度。 9.4 并发调度的可串行性并发调度的可串行性【例例】 现在有两个事务,分别包含下

10、列操作:现在有两个事务,分别包含下列操作: 事务事务T1T1:读:读B B;A=B+1A=B+1;写回;写回A A 事务事务T2T2:读:读A A;B=A+1B=A+1;写回;写回B B现给出对这两个事务不同的调度策略现给出对这两个事务不同的调度策略 。9.4 并发调度的可串行性并发调度的可串行性T1T2Slock BY=R(B)=2Unlock BXlock AA=Y+1=3W(A)Unlock ASlock AX=R(A)=3Unlock AXlock BB=X+1=4W(B)Unlock B串行调度串行调度(a)n 假设假设A、B的初值均为的初值均为2。n 按按T1T2次序执行结果为次序

11、执行结果为A=3,B=4 n 串行调度策略串行调度策略,正确的调度正确的调度 9.4 并发调度的可串行性并发调度的可串行性T1T2Slock AX=R(A)=2Unlock AXlock BB=X+1=3W(B)Unlock BSlock BY=R(B)=3Unlock BXlock AA=Y+1=4W(A)Unlock A串行调度串行调度(b)n 假设假设A、B的初值均为的初值均为2。n T2T1次序执行结果为次序执行结果为B=3,A=4 n 串行调度策略串行调度策略,正确的调度正确的调度 9.4 并发调度的可串行性并发调度的可串行性T1T2Slock BY=R(B)=2Slock AX=R

12、(A)=2Unlock BUnlock AXlock AA=Y+1=3W(A)Xlock BB=X+1=3W(B)Unlock AUnlock B不可串行化的调度不可串行化的调度n 执行结果与执行结果与(a)、(b)的结果都不同的结果都不同n 是错误的调度是错误的调度 9.4 并发调度的可串行性并发调度的可串行性T1T2Slock BY=R(B)=2Unlock BXlock ASlock AA=Y+1=3等待等待W(A)等待等待Unlock A等待等待X=R(A)=3Unlock AXlock BB=X+1=4W(B)Unlock B可串行化的调度可串行化的调度 n 执行结果与串行调度执行结

13、果与串行调度(a)的的执行结果相同执行结果相同n 是正确的调度是正确的调度 9.4 并发调度的可串行性并发调度的可串行性9.4 并发调度的可串行性并发调度的可串行性v 可串行性是并发事务正确性的准则。v DBMS的并发控制机制如何提供一定的手段来保证调度是可串行化的?v两段锁(Two-Phase Locking)协议就是保证并发调度可串行性的封锁协议。9.5两段锁协议两段锁协议v 两段锁协议是指所有事务必须分两个阶段提出加锁和解锁申请。(1)在任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁。(2)在释放一个封锁之后,事务不再申请和获得任何其他封锁。【例例】事务事务Ti遵守两段锁协议

14、,其封锁序列是遵守两段锁协议,其封锁序列是 :Slock A Slock B Xlock C Unlock B Unlock A Unlock C;|扩展阶段扩展阶段| 收缩阶段收缩阶段 |事务事务Tj不遵守两段锁协议,其封锁序列是:不遵守两段锁协议,其封锁序列是: Slock A Unlock A Slock B Xlock C Unlock C Unlock B;9.5两段锁协议两段锁协议两段锁协议(续)两段锁协议(续)事务事务T1事务事务T2Slock(A)R(A=260)Slock(C)R(C=300)Xlock(A)W(A=160)Xlock( C )W(C=250)Slock(A)

15、Slock(B)等待等待R(B=1000)等待等待Xlock(B)等待等待W(B=1100) 等待等待Unlock(A)等待等待R(A=160)Xlock(A)Unlock(B)W(A=210)Unlock( C )n 左图的调度是遵守两段锁左图的调度是遵守两段锁协议的,因此一定是一个协议的,因此一定是一个可串行化调度。可串行化调度。遵守两段锁协议的可串行化调度遵守两段锁协议的可串行化调度v事务遵守两段锁协议是可串行化调度的充分条件,事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件。而不是必要条件。v若并发事务都遵守两段锁协议,则对这些事务的若并发事务都遵守两段锁协议,则对这些事务的

16、任何并发调度策略都是可串行化的任何并发调度策略都是可串行化的v若并发事务的一个调度是可串行化的,不一定所若并发事务的一个调度是可串行化的,不一定所有事务都符合两段锁协议。有事务都符合两段锁协议。9.5两段锁协议两段锁协议v两段锁协议与防止死锁的一次封锁法两段锁协议与防止死锁的一次封锁法区别区别 一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行,因此一次封锁法遵守两段锁协议。 但是两段锁协议并不要求事务必须一次将所有要使用的数据全部加锁,因此遵守两段锁协议的事务可能发生死锁。9.5两段锁协议两段锁协议【例例】遵守两段锁协议的事务发生死锁遵守两段锁协议的事务发生死锁T1

17、Slock BR(B)=2 Xlock A等待等待等待等待T2 Slock AR(A)=2 Xlock B等待等待9.5两段锁协议两段锁协议9.6 封锁粒度封锁粒度1.1.封锁粒度封锁粒度 封锁对象的大小称为封锁粒度(Granularity)。 v封锁的对象:逻辑单元、物理单元。 例:在关系数据库中,封锁对象: 逻辑单元: 属性值、属性值集合、元组、关系、索引项、整个索引、整个数据库等。 物理单元:页(数据页或索引页)、物理记录等。v封锁粒度与系统的并发度和并发控制的开销密切封锁粒度与系统的并发度和并发控制的开销密切相关。相关。 封锁的粒度越大,数据库所能够封锁的数据单元就越少,并发度就越小,

18、系统开销也越小; 封锁的粒度越小,并发度较高,但系统开销也就越大。9.6 封锁粒度封锁粒度2. 2. 多粒度封锁多粒度封锁 一个系统中能同时支持多种封锁粒度供不同的事务选择是比较理想的,这种封锁方法称为多粒度封锁(Multiple Granularity Locking)(Multiple Granularity Locking)。9.6 封锁粒度封锁粒度v选择封锁粒度选择封锁粒度 选择封锁粒度同时考虑封锁开销和并发度两个因素。 需要处理多个关系的大量元组的用户事务:以数据库为封锁单位; 需要处理大量元组的用户事务:以关系为封锁单元; 只处理少量元组的用户事务:以元组为封锁单位。9.6 封锁粒

19、度封锁粒度v多粒度树多粒度树 以树形结构来表示多级封锁粒度 根结点是整个数据库,表示最大的数据粒度 叶结点表示最小的数据粒度 9.6 封锁粒度封锁粒度【例例】三级粒度树。根结点为数据库,数据库的子三级粒度树。根结点为数据库,数据库的子结点为关系,关系的子结点为元组。结点为关系,关系的子结点为元组。数据库数据库关系关系Rn关系关系R1元组元组元组元组元组元组元组元组 三级粒度树三级粒度树9.6 封锁粒度封锁粒度3. 3. 意向锁(意向锁(intention lockintention lock)v一般对某个数据对象加锁,系统要检查该数据对象上有无封锁与之冲突,还要检查其所有上级结点,看本事务的封

20、锁是否与该数据对象上的封锁冲突,还要检查其所有下级结点,看上面的封锁是否与本事务的封锁冲突。显然,这样的检查方法效率很低,为此可以引入意向锁以解决这种冲突。9.6 封锁粒度封锁粒度v如果对一个结点加意向锁,则说明该结点的下层结点正在被加锁;v对任一结点加基本锁,必须先对它的上层结点加意向锁;v例如,对任一元组加锁时,必须先对它所在的数据库和关系加意向锁。9.6 封锁粒度封锁粒度v具有意向锁的多粒度封锁方法具有意向锁的多粒度封锁方法 提高了系统的并发度 减少了加锁和解锁的开销 在实际的数据库管理系统产品中得到广泛应用。 9.6 封锁粒度封锁粒度本章小结本章小结1. 基本概念:并发控制、封锁、封锁协议、活锁、死锁、可串行化的调度、封锁粒度、意向锁。2. 数据不一致性问题主要包括3类:丢失数据、不可重复读和读“脏”数据。3. 封锁通常包含申请加锁、获得锁以及释放锁这3个环节。4. 最基本的封锁类型有两种:排它锁(X锁)和共享锁(S锁)。5. 三级封锁协议可以在不同程度上予以解决3类数据不一致性问题。6. 避免活锁的简单方法是采用先来先服务的策略,而使用一次封锁法和顺序封锁法可以有效避免死锁。7. 两段锁协议:首先要申请并获得对该数据的封锁;在释放一个封锁之后,事务不再申请和获得任何其他封锁。本章小结本章小结

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com