数据库事务幻灯片

上传人:F****n 文档编号:88153768 上传时间:2019-04-20 格式:PPT 页数:63 大小:3.63MB
返回 下载 相关 举报
数据库事务幻灯片_第1页
第1页 / 共63页
数据库事务幻灯片_第2页
第2页 / 共63页
数据库事务幻灯片_第3页
第3页 / 共63页
数据库事务幻灯片_第4页
第4页 / 共63页
数据库事务幻灯片_第5页
第5页 / 共63页
点击查看更多>>
资源描述

《数据库事务幻灯片》由会员分享,可在线阅读,更多相关《数据库事务幻灯片(63页珍藏版)》请在金锄头文库上搜索。

1、1,李宁 西北工业大学计算机学院,第十章 并发控制,2,2,第九章内容回顾,本章重点 事务的概念和性质 事务故障、系统故障和介质故障的恢复技术与原理 Redo & Undo 本章难点 具有检查点的恢复技术,3,3,本章目录,10.1 并发控制概述 10.2 封锁 10.3 封锁协议 10.4 活锁和死锁 10.5 并发调度的可串行性 10.6 两段锁协议 10.7 封锁的粒度 11.8 小结,4,4,10.1 并发控制概述,多用户数据库系统 银行、票务系统等 多事务执行方式 事务串行执行 交叉并发方式(Interleaved Concurrency) 同时并发方式(simultaneous c

2、oncurrency),本章讨论的数据库 系统并发控制技术 是以单处理机系 统为基础的,5,5,10.1 并发控制概述,事务是并发控制的基本单位 并发控制的任务 对并发操作进行正确调度 保证事务的隔离性 保证数据库的一致性,6,6,10.1 并发控制概述,并发操作带来的数据不一致性 丢失修改(lost update) - T2提交的结果覆盖了T1提交的结果 不可重复读(non-repeatable read) - T1读,T2更新,T1再次读(与第一次读取数据不同) 该类错误中还包括:幻读(phantom row) - T1读后,T2删除/插入部分记录,T1再读就不同 脏数据(dirty re

3、ad) - T1修改写回,T2读,T1回滚,此时T2读数据为脏数据,7,7,10.1 并发控制概述,丢失修改(lost update) - T2提交的结果覆盖了T1提交的结果,8,8,10.1 并发控制概述,不可重复读(non-repeatable read) - T1读,T2更新,T1再次读(与第一次读取数据不同),T1读取B=100进行运算 T2读取同一数据B,对其进行修改后将B=200写回数据库 T1为了对读取值校对重读B,B已为200,与第一次读取值不一致,9,9,10.1 并发控制概述,幻读(phantom row) - T1读后,T2删除/插入部分记录,T1再读就不同,10,10,

4、10.1 并发控制概述,脏数据(dirty read) - T1修改写回,T2读,T1回滚,此时T2读数据为脏数据,T1将C值修改为200, T2读到C为200 T1由于某种原因撤销,其修改作废, C恢复原值100 这时T2读到的C为200,与数据库内容不一致,就是“脏”数据,11,11,10.1 并发控制概述,并发控制的主要技术 封锁(Locking) 时间戳(Timestamp) 乐观控制法 多版本并发控制(MVCC),12,12,本章目录,10.1 并发控制概述 10.2 封锁 10.3 封锁协议 10.4 活锁和死锁 10.5 并发调度的可串行性 10.6 两段锁协议 10.7 封锁的

5、粒度 11.8 小结,13,13,10.2 封锁,什么是封锁 封锁就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁 加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。 基本封锁类型 一个事务对某个数据对象加锁后究竟拥有什么样的控制是由封锁的类型决定的。 排它锁(Exclusive lock,简记为X锁,又称为写锁) 若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。 共享锁(Share lock,简记为S锁,又称为读锁) 若事务T对数据对象A加上S锁,则

6、其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁,14,14,10.2 封锁,锁的相容矩阵,15,15,本章目录,10.1 并发控制概述 10.2 封锁 10.3 封锁协议 10.4 活锁和死锁 10.5 并发调度的可串行性 10.6 两段锁协议 10.7 封锁的粒度 11.8 小结,16,16,10.3 封锁协议,什么是封锁协议 在运用X锁和S锁对数据对象加锁时,需要约定一些 规则,这些规则为封锁协议(Locking Protocol)。 何时申请X锁或S锁 持锁时间 何时释放 不同的规则所形成的各种不同的封锁协议,它们分别在不同的程度上为并发操作的正确调度提供一定的保证。 一级

7、封锁协议 二级封锁协议 三级封锁协议,17,17,10.3 封锁协议,一级封锁协议 事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。 事务结束包括commit和rollback。注意读数据无需加锁!,可以解决: -修改丢失 无法解决: -可重复读 -读脏数据,18,18,10.3 封锁协议,二级封锁协议 一级封锁协议 + 事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。,可以解决: -修改丢失 -读脏数据 无法解决: -可重复读,19,19,10.3 封锁协议,三级封锁协议 一级封锁协议 + 事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。,可以解决: -修

8、改丢失 -读脏数据 -可重复读 无法解决:,20,20,10.3 封锁协议,封锁协议小结 - 各级封锁区别:什么操作需要申请封锁以及何时释放锁 - 封锁协议级别越高,一致性程度越高,21,21,本章目录,10.1 并发控制概述 10.2 封锁 10.3 封锁协议 10.4 活锁和死锁 10.5 并发调度的可串行性 10.6 两段锁协议 10.7 封锁的粒度 11.8 小结,22,22,10.4.1 活锁,封锁机制带来的问题 死锁 活锁,活锁: T1、T2、T3、T4相继申请R的锁,可是T2可能永远处于等待之中。,解决方案: 依据请求封锁的先后次序对事务排队,首先批准申请队列中第一个事务获得锁。

9、,23,23,10.4.2 死锁,死锁,T1在等待T2释放R2,而T2又在等待T1释放R1,T1和T2两个事务永远不能结束,形成死锁。,24,24,10.4.2 死锁,解决死锁 - 预防死锁发生,破坏产生 死锁的条件,1. 一次封锁法 要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。 如右图:T1一次对R1和R2加锁 引起问题: 1.扩大封锁范围,降低系统并发度。 2.由于数据的动态性,难以事先精确 确定需要加锁的数据对象 - 扩大封锁范围,系统并发度 再次降低,25,25,10.4.2 死锁,解决死锁 - 预防死锁发生,2. 顺序封锁法 预先对数据对象规定一个封锁顺序,所

10、有事务都按这个顺序实行封锁。如树结构中,封锁顺序必须是从根节点开始。 引起问题: 1.维护成本高: - 需要封锁的数据对象极多, - 随数据的插入、删除等操作而不断地变化。 2.难以实现: 事务的封锁请求可以随着事务的执行而动态地决定,很难事先确定每一个事务要封锁哪些对象,因此也就很难按规定的顺序去施加封锁。,死锁的预防 不太适用,26,26,10.4.2 死锁,解决死锁 - 死锁的诊断与解除,1. 超时法 如果一个事务的等待时间超过了规定的时限,就认为发生了死锁。 优点:实现简单 缺点: - 有可能误判死锁 - 时限若设置得太长,死锁发生后不能及时发现,27,27,10.4.2 死锁,解决死

11、锁 - 死锁的诊断与解除,2. 等待图法 用事务等待图动态反映所有事务的等待情况。,- 若T1等待T2,则T1, T2之间划一条有向边,从T1指向T2 - 定期检测,如果发现该有向图中存在回路,则认为存在死锁,解除死锁:选择一个处理死锁代价最小的事务,将其撤消, 释放其所持有的锁,使其它事务能继续运行下去。,28,28,本章目录,10.1 并发控制概述 10.2 封锁 10.3 封锁协议 10.4 活锁和死锁 10.5 并发调度的可串行性 10.6 两段锁协议 10.7 封锁的粒度 11.8 小结,29,29,10.5 并发调度的可串行性,什么样的并发操作调度是正确的? 并行调度是随机的,不同

12、的调度可能会产生不同的结果。 将所有事务串行起来的调度策略一定是正确的调度策略。 以不同的顺序串行执行事务也可能会产生不同的结果,但由于不会将数据库置于不一致状态,所以都可认为是正确的。,可串行化(Serializable)的调度策略: 几个事务的并行执行是正确的,当且仅当其结果与 按某一次序串行地执行它们时的结果相同。,30,30,10.5.1 可串行性调度,可串行化调度 事务T1:读B; A=B+1;写回A 事务T2:读A; B=A+1;写回B,A=3 B=4,A=4 B=3,31,31,10.5.1 可串行性调度,不可串行化调度 事务T1:读B; A=B+1;写回A 事务T2:读A; B

13、=A+1;写回B,A=3 B=3,A=3 B=4,32,32,10.5.2 冲突可串行性调度,冲突可串行化调度:判断可串行化的方法之一 一个比可串行化更严格的条件 商用系统中的调度器采用 冲突操作: 不同的事务对同一数据的读写操作和写写操作 Ri(x)与Wj(x) /*事务Ti读x, Tj写x,其中ij*/ Wi(x)与Wj(x) /*事务Ti写x, Tj写x,其中ij*/ 不同事务的冲突操作是不能交换的,33,33,10.5.2 冲突可串行性调度,冲突可串行化调度 一个调度Sc在保证冲突操作的次序不变的情况下,通过交换两个事务不冲突操作的次序得到另一个调度Sc,如果Sc是串行的,称调度Sc是

14、冲突可串行化的调度。,调度1,调度2,调度3,调度4,因为调度1等价于一个串行调度T1-T2, 所以调度1是一个冲突可串行化的调度。,34,34,10.5.2 冲突可串行性调度,若一个调度是冲突可串行化,则一定是可串行化的调度。,因为Sc2等价于一个串行调度T1-T2, 所以Sc1是冲突可串行化的调度。 Sc1也是一个可串行化调度。,Sd调度:r1(A)w1(A)r2(A)W2(A)r2(B)w2(B)r1(B)w1(B) 是否可串行化?,35,35,10.5.2 冲突可串行性调度,冲突可串行化调度是可串行化调度的充分条件,不是必要 条件。还有不满足冲突可串行化条件的可串行化调度。 例如:有三

15、个事务,但是调度L2是可串行化的,因为L2执行的结果与调度L1相同, Y的 值都等于T2的值,X的值都等于T3的值,如何保证并发操作调度正确性? 封锁方法:两段锁协议 时标方法 乐观方法,36,36,本章目录,10.1 并发控制概述 10.2 封锁 10.3 封锁协议 10.4 活锁和死锁 10.5 并发调度的可串行性 10.6 两段锁协议 10.7 封锁的粒度 11.8 小结,37,37,10.6 两段锁协议,“两段”锁的含义(Two-Phase Locking,简称2PL) 事务分为两个阶段 1.第一阶段是获得封锁,也称为扩展阶段; 事务可以申请获得任何数据项上的任何类型的锁,但 是不能释

16、放任何锁 2.第二阶段是释放封锁,也称为收缩阶段。 事务可以释放任何数据项上的任何类型的锁,但是不 能再申请任何锁。,遵守2PL,不遵守2PL,38,38,10.6 两段锁协议,结论: 并行执行的所有事务均遵守两段锁协议,则对这些事务的所有并行调度策略都是可串行化的。 即: (1)所有遵守两段锁协议的事务,其并行执行的结果一定是正确的。 (2)事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件。 (3)可串行化的调度中,不一定所有事务都必须符合两段锁协议。,39,39,10.6 两段锁协议,左图的调度是遵守两段锁 协议的,因此一定是一个可 串行化调度。 如何验证?,40,40,10.6 两段锁协议,两段锁协议与防止死锁的一次封锁法的比较: 一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行,因此一次封锁法遵守两段锁协议; 但是两段锁协议并不要求事务必须一次将所有要使用的数据全部加锁,因此遵守两段锁协议的事务可能发生死锁。 例:遵守两段锁协议的事务发生死锁,41,41,

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

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

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