数据库事务课件.ppt

上传人(卖家):三亚风情 文档编号:2823252 上传时间:2022-05-29 格式:PPT 页数:63 大小:5.88MB
下载 相关 举报
数据库事务课件.ppt_第1页
第1页 / 共63页
数据库事务课件.ppt_第2页
第2页 / 共63页
数据库事务课件.ppt_第3页
第3页 / 共63页
数据库事务课件.ppt_第4页
第4页 / 共63页
数据库事务课件.ppt_第5页
第5页 / 共63页
点击查看更多>>
资源描述

1、1李宁李宁 西北工业大学计算机学院西北工业大学计算机学院第十章第十章 并发控制并发控制 2 2第九章内容回顾第九章内容回顾n 本章重点本章重点l事务的概念和性质事务的概念和性质l事务故障、系统故障和介质故障的恢复技术与原理事务故障、系统故障和介质故障的恢复技术与原理lRedo & UndoRedo & Undon 本章难点本章难点l具有检查点的恢复技术具有检查点的恢复技术 3 3本章目录本章目录10.1 并发控制概述并发控制概述10.2 封锁封锁10.3 封锁协议封锁协议10.4 活锁和死锁活锁和死锁10.5 并发调度的可串行性并发调度的可串行性10.6 两段锁协议两段锁协议10.7 封锁的粒

2、度封锁的粒度11.8 小结小结4 410.1 10.1 并发控制概述并发控制概述多用户数据库系统多用户数据库系统n 银行、票务系统等银行、票务系统等多事务执行方式多事务执行方式n 事务串行执行事务串行执行n 交叉并发方式(交叉并发方式(Interleaved Concurrency)n 同时并发方式(同时并发方式(simultaneous concurrency)本章讨论的数据库系统并发控制技术是以单处理机系统为基础的5 510.1 10.1 并发控制概述并发控制概述事务是并发控制的基本单位事务是并发控制的基本单位并发控制的任务并发控制的任务n 对并发操作进行正确调度对并发操作进行正确调度n

3、保证事务的隔离性保证事务的隔离性n 保证数据库的一致性保证数据库的一致性6 610.1 10.1 并发控制概述并发控制概述并发操作带来的数据不一致性l丢失修丢失修改改(lost update)(lost update) - T2提交的结果覆盖了T1提交的结果l不可重复不可重复读读(non-repeatable read)(non-repeatable read) - T1读,T2更新,T1再次读(与第一次读取数据不同) 该类错误中还包括:幻读幻读(phantom row)(phantom row) - T1读后,T2删除/插入部分记录,T1再读就不同 l脏数脏数据据(dirty read)(d

4、irty read) - T1修改写回,T2读,T1回滚,此时T2读数据为脏数据7 710.1 10.1 并发控制概述并发控制概述l丢失修丢失修改改(lost update)(lost update) - T2提交的结果覆盖了T1提交的结果8 810.1 10.1 并发控制概述并发控制概述l不可重复不可重复读读(non-repeatable read)(non-repeatable read) - T1读,T2更新,T1再次读(与第一次读取数据不同)n T1读取B=100进行运算n T2读取同一数据B,对其进行修改后将B=200写回数据库n T1为了对读取值校对重读B,B已为200,与第一次读

5、取值不一致9 910.1 10.1 并发控制概述并发控制概述l幻读幻读(phantom row)(phantom row) - T1读后,T2删除/插入部分记录,T1再读就不同101010.1 10.1 并发控制概述并发控制概述l脏数脏数据据(dirty read)(dirty read) - T1修改写回,T2读,T1回滚,此时T2读数据为脏数据n T1将C值修改为200, T2读到C为200n T1由于某种原因撤销,其修改作废, C恢复原值100n 这时T2读到的C为200,与数据库内容不一致,就是“脏”数据111110.1 10.1 并发控制概述并发控制概述并发控制的主要技术l封锁封锁(

6、Locking)(Locking) l时间戳时间戳(Timestamp)(Timestamp) l乐观控制法乐观控制法 l多版本并发控制多版本并发控制(MVCC)(MVCC) 1212本章目录本章目录10.1 并发控制概述并发控制概述10.2 封锁封锁10.3 封锁协议封锁协议10.4 活锁和死锁活锁和死锁10.5 并发调度的可串行性并发调度的可串行性10.6 两段锁协议两段锁协议10.7 封锁的粒度封锁的粒度11.8 小结小结131310.2 10.2 封锁封锁n 什么是封锁什么是封锁封锁就是事务封锁就是事务T T在对某个数据对象在对某个数据对象( (例如表、记录等例如表、记录等) )操作之

7、前,操作之前,先向系统发出请求,先向系统发出请求,对其加锁对其加锁加锁后事务加锁后事务T T就对该数据对象有了一定的控制,在事务就对该数据对象有了一定的控制,在事务T T释放它释放它的锁之前,其它的事务不能更新此数据对象。的锁之前,其它的事务不能更新此数据对象。n 基本封锁类型基本封锁类型一个事务对某个数据对象加锁后究竟拥有什么样的控制是一个事务对某个数据对象加锁后究竟拥有什么样的控制是由封锁的类型决定的。由封锁的类型决定的。排它锁(排它锁(Exclusive lockclusive lock,简记为,简记为X X锁,又称为写锁)锁,又称为写锁)若事务若事务T T对数据对象对数据对象A A加上

8、加上X X锁,则只允许锁,则只允许T T读取和修改读取和修改A A,其它,其它任何事务都不能再对任何事务都不能再对A A加任何类型的锁,直到加任何类型的锁,直到T T释放释放A A上的锁。上的锁。共享锁(共享锁(Share lockShare lock,简记为,简记为S S锁,又称为读锁)锁,又称为读锁)若事务若事务T T对数据对象对数据对象A A加上加上S S锁,则其它事务只能再对锁,则其它事务只能再对A A加加S S锁,锁,而不能加而不能加X X锁,直到锁,直到T T释放释放A A上的上的S S锁锁141410.2 10.2 封锁封锁n 锁的相容矩阵锁的相容矩阵1515本章目录本章目录10

9、.1 并发控制概述并发控制概述10.2 封锁封锁10.3 封锁协议封锁协议10.4 活锁和死锁活锁和死锁10.5 并发调度的可串行性并发调度的可串行性10.6 两段锁协议两段锁协议10.7 封锁的粒度封锁的粒度11.8 小结小结161610.3 10.3 封锁协议封锁协议n 什么是封锁协议什么是封锁协议 在运用在运用X锁和锁和S锁对数据对象加锁时,需要约定一些锁对数据对象加锁时,需要约定一些 规则,这些规则为封锁协议(规则,这些规则为封锁协议(Locking Protocol)。)。何时申请何时申请X锁或锁或S锁锁持锁时间持锁时间何时释放何时释放n 不同的规则所形成的各种不同的封锁协议,它们分

10、别在不同的规则所形成的各种不同的封锁协议,它们分别在不同的程度上为并发操作的正确调度提供一定的保证。不同的程度上为并发操作的正确调度提供一定的保证。一级封锁协议一级封锁协议二级封锁协议二级封锁协议三级封锁协议三级封锁协议171710.3 10.3 封锁协议封锁协议n 一级封锁协议一级封锁协议事务事务T在修改数据在修改数据R之前必须先对其加之前必须先对其加X锁,锁,直到事务结束才释放。直到事务结束才释放。事务结束包括事务结束包括commit和和rollback。注意读数据无需加锁!注意读数据无需加锁!可以解决:可以解决: -修改丢失修改丢失无法解决:无法解决: -可重复读可重复读 -读脏数据读脏

11、数据181810.3 10.3 封锁协议封锁协议n 二级封锁协议二级封锁协议 一级封锁协议一级封锁协议 + 事务事务T在读取数据在读取数据R之前必须先对其加之前必须先对其加S锁,锁,读完后即可读完后即可释放释放S锁锁。可以解决:可以解决: -修改丢失修改丢失 -读脏数据读脏数据无法解决:无法解决: -可重复读可重复读191910.3 10.3 封锁协议封锁协议n 三级封锁协议三级封锁协议 一级封锁协议一级封锁协议 + 事务事务T在读取数据在读取数据R之前必须先对其加之前必须先对其加S锁,直到锁,直到事务结束事务结束才释放。才释放。可以解决:可以解决: -修改丢失修改丢失 -读脏数据读脏数据 -

12、可重复读可重复读无法解决:无法解决: 202010.3 10.3 封锁协议封锁协议n 封锁协议小结封锁协议小结 - 各级封锁区别:什么操作需要申请封锁以及何时释放锁各级封锁区别:什么操作需要申请封锁以及何时释放锁 - 封锁协议级别越高,一致性程度越高封锁协议级别越高,一致性程度越高2121本章目录本章目录10.1 并发控制概述并发控制概述10.2 封锁封锁10.3 封锁协议封锁协议10.4 活锁和死锁活锁和死锁10.5 并发调度的可串行性并发调度的可串行性10.6 两段锁协议两段锁协议10.7 封锁的粒度封锁的粒度11.8 小结小结222210.4.1 10.4.1 活锁活锁n 封锁机制带来的

13、问题封锁机制带来的问题l死锁死锁l活锁活锁活锁:活锁:T1T1、T2T2、T3T3、T4T4相相继申请继申请R R的锁,可的锁,可是是T2T2可能永远处于可能永远处于等待之中。等待之中。解决方案:解决方案:依据请求封锁的先依据请求封锁的先后次序对事务排队,后次序对事务排队,首先批准申请队列首先批准申请队列中第一个事务获得中第一个事务获得锁。锁。232310.4.2 10.4.2 死锁死锁n 死锁死锁T1T1在等待在等待T2T2释放释放R2R2,而,而T2T2又在等待又在等待T1T1释放释放R1R1,T1T1和和T2T2两个事务永远不两个事务永远不能结束,形成死锁。能结束,形成死锁。242410

14、.4.2 10.4.2 死锁死锁n 解决死锁解决死锁 - 预防死锁发生预防死锁发生 破坏产生破坏产生死锁的条件死锁的条件1. 1. 一次封锁法一次封锁法 要求每个事务必须一次将所有要使用的数据全部加锁,要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。否则就不能继续执行。 如右图:如右图:T1T1一次对一次对R1R1和和R2R2加锁加锁引起问题:引起问题:1.1.扩大封锁范围,降低系统并发度。扩大封锁范围,降低系统并发度。2.2.由于数据的动态性,难以事先精确由于数据的动态性,难以事先精确 确定需要加锁的数据对象确定需要加锁的数据对象 - - 扩大封锁范围,系统并发度扩大封锁

15、范围,系统并发度 再次降低再次降低252510.4.2 10.4.2 死锁死锁n 解决死锁解决死锁 - 预防死锁发生预防死锁发生 2. 2. 顺序封锁法顺序封锁法 预先对数据对象规定一个封锁顺序,所有事务都按预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。如树结构中,封锁顺序必须是从根这个顺序实行封锁。如树结构中,封锁顺序必须是从根节点开始。节点开始。引起问题:引起问题: 1. 1.维护成本高:维护成本高: - - 需要封锁的数据对象极多,需要封锁的数据对象极多, - - 随数据的插入、删除等操作而不断地变化。随数据的插入、删除等操作而不断地变化。 2. 2.难以实现:难以实现:

16、 事务的封锁请求可以随着事务的执行而动态地决定,事务的封锁请求可以随着事务的执行而动态地决定,很难事先确定每一个事务要封锁哪些对象,因此也就很很难事先确定每一个事务要封锁哪些对象,因此也就很难难按规定的顺序按规定的顺序去施加封锁。去施加封锁。死锁的预防死锁的预防不太适用不太适用262610.4.2 10.4.2 死锁死锁n 解决死锁解决死锁 - 死锁的诊断与解除死锁的诊断与解除1. 1. 超时法超时法 如果一个事务的等待时间超过了规定的时限,就认如果一个事务的等待时间超过了规定的时限,就认为发生了死锁。为发生了死锁。优点:实现简单优点:实现简单缺点:缺点: - - 有可能误判死锁有可能误判死锁

17、 - - 时限若设置得太长,死锁发生后不能及时发现时限若设置得太长,死锁发生后不能及时发现272710.4.2 10.4.2 死锁死锁n 解决死锁解决死锁 - 死锁的诊断与解除死锁的诊断与解除2. 2. 等待图法等待图法 用事务等待图动态反映所有事务的等待情况。用事务等待图动态反映所有事务的等待情况。- 若T1等待T2,则T1, T2之间划一条有向边,从T1指向T2- 定期检测,如果发现该有向图中存在回路,则认为存在死锁解除死锁:选择一个处理死锁代价最小的事务,将其撤消,解除死锁:选择一个处理死锁代价最小的事务,将其撤消,释放其所持有的锁,使其它事务能继续运行下去。释放其所持有的锁,使其它事务

18、能继续运行下去。2828本章目录本章目录10.1 并发控制概述并发控制概述10.2 封锁封锁10.3 封锁协议封锁协议10.4 活锁和死锁活锁和死锁10.5 并发调度的可串行性并发调度的可串行性10.6 两段锁协议两段锁协议10.7 封锁的粒度封锁的粒度11.8 小结小结292910.10.5 5 并发调度的可串行性并发调度的可串行性n 什么样的并发操作调度是正确的?什么样的并发操作调度是正确的?l并行调度是随机的,不同的调度可能会产生不同的结果。并行调度是随机的,不同的调度可能会产生不同的结果。l将所有事务串行起来的调度策略一定是正确的调度策略将所有事务串行起来的调度策略一定是正确的调度策略

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

20、事务T2:读A; B=A+1;写回B A=3B=4A=4B=3313110.10.5.1 5.1 可串行性调度可串行性调度n 不可串行化调度不可串行化调度l事务T1:读B; A=B+1;写回Al事务T2:读A; B=A+1;写回B A=3B=3A=3B=4323210.10.5.2 5.2 冲突可串行性调度冲突可串行性调度n 冲突可串行化调度:判断可串行化的方法之一冲突可串行化调度:判断可串行化的方法之一l一个比可串行化更严格的条件l商用系统中的调度器采用n冲突操作冲突操作: : 不同的事务对同一数据的读不同的事务对同一数据的读写写操作和写操作和写写写操作操作Ri(x)Ri(x)与与Wj(x)

21、 /Wj(x) /* *事务事务TiTi读读x x, Tj Tj写写x x,其中,其中ijij* */ /Wi(x)Wi(x)与与Wj(x) /Wj(x) /* *事务事务TiTi写写x x, Tj Tj写写x x,其中,其中ijij* */ /n不同事务的冲突操作是不能交换的333310.10.5.2 5.2 冲突可串行性调度冲突可串行性调度n 冲突可串行化调度冲突可串行化调度l一个调度Sc在保证冲突操作的次序不变的情况下,通过交换两个事务不冲突操作的次序得到另一个调度Sc,如果Sc是串行的,称调度Sc是冲突可串行化的调度。 调度1调度2调度3调度4因为调度因为调度1 1等价于一个串行调度等

22、价于一个串行调度T1-T2T1-T2,所以调度所以调度1 1是一个冲突可串行化的调度。是一个冲突可串行化的调度。343410.10.5.2 5.2 冲突可串行性调度冲突可串行性调度n若一个调度是冲突可串行化,则一定是可串行化的调度。若一个调度是冲突可串行化,则一定是可串行化的调度。 因为因为Sc2Sc2等价于一个串行调度等价于一个串行调度T1-T2T1-T2,所以所以Sc1Sc1是冲突可串行化的调度。是冲突可串行化的调度。 Sc1 Sc1也是一个可串行化调度。也是一个可串行化调度。SdSd调度:调度:r r1 1(A)w(A)w1 1(A)r(A)r2 2(A)W(A)W2 2(A)r(A)r

23、2 2(B)w(B)w2 2(B)r(B)r1 1(B)w(B)w1 1(B) (B) 是否可串行化?是否可串行化?353510.10.5.2 5.2 冲突可串行性调度冲突可串行性调度n冲突可串行化调度是可串行化调度的冲突可串行化调度是可串行化调度的充分条件充分条件,不是必要,不是必要条件。还有不满足冲突可串行化条件的可串行化调度。条件。还有不满足冲突可串行化条件的可串行化调度。n例如:有三个事务例如:有三个事务但是调度但是调度L2L2是可串行化的,因为是可串行化的,因为L2L2执行的结果与调度执行的结果与调度L1L1相同,相同, Y Y的的值都等于值都等于T2T2的值,的值,X X的值都等于

24、的值都等于T3T3的值的值如何保证并发操作调度正确性?如何保证并发操作调度正确性?l 封锁方法:封锁方法:两段锁协议两段锁协议l 时标方法时标方法l 乐观方法乐观方法3636本章目录本章目录10.1 并发控制概述并发控制概述10.2 封锁封锁10.3 封锁协议封锁协议10.4 活锁和死锁活锁和死锁10.5 并发调度的可串行性并发调度的可串行性10.6 两段锁协议两段锁协议10.7 封锁的粒度封锁的粒度11.8 小结小结373710.6 两段锁协议 n “两段两段”锁的含锁的含义(义(Two-Phase LockingTwo-Phase Locking,简称,简称2 2PLPL)事务分为两个阶段

25、事务分为两个阶段 1.1.第一阶段是获得封锁,也称为扩展阶段;第一阶段是获得封锁,也称为扩展阶段; 事务可以申请获得任何数据项上的任何类型的锁,但事务可以申请获得任何数据项上的任何类型的锁,但 是不能释放任何锁是不能释放任何锁 2.2.第二阶段是释放封锁,也称为收缩阶段。第二阶段是释放封锁,也称为收缩阶段。 事务可以释放任何数据项上的任何类型的锁,但是不事务可以释放任何数据项上的任何类型的锁,但是不 能再申请任何锁。能再申请任何锁。遵守遵守2PL2PL不遵守不遵守2PL2PL383810.6 两段锁协议 n 结论:结论: 并行执行的所有事务均遵守两段锁协议,则对这并行执行的所有事务均遵守两段锁

26、协议,则对这些事务的所有并行调度策略都是可串行化的。些事务的所有并行调度策略都是可串行化的。即:即:(1)所有遵守两段锁协议的事务,其并行执行的结果所有遵守两段锁协议的事务,其并行执行的结果一定是正确的。一定是正确的。(2)事务遵守两段锁协议是可串行化调度的事务遵守两段锁协议是可串行化调度的充分条件充分条件,而不是必要条件。,而不是必要条件。(3)可串行化的调度中,不一定所有事务都必须符合可串行化的调度中,不一定所有事务都必须符合两段锁协议。两段锁协议。393910.6 两段锁协议 n 左图的调度是遵守两段锁左图的调度是遵守两段锁协议的,因此一定是一个可协议的,因此一定是一个可串行化调度。串行

27、化调度。n 如何验证?如何验证?404010.6 两段锁协议 n 两段锁协议与防止死锁的一次封锁法的比较两段锁协议与防止死锁的一次封锁法的比较:l一次封锁法要求每个事务一次封锁法要求每个事务必须一次将所有要使用的数据全必须一次将所有要使用的数据全部加锁部加锁,否则就不能继续执行,因此一次封锁法遵守两段,否则就不能继续执行,因此一次封锁法遵守两段锁协议;锁协议;l但是但是两段锁协议并不要求事务必须一次将所有要使用的数两段锁协议并不要求事务必须一次将所有要使用的数据全部加锁据全部加锁,因此遵守两段锁协议的事务可能发生死锁。,因此遵守两段锁协议的事务可能发生死锁。例:遵守两段锁协议的事务发生死锁例:

28、遵守两段锁协议的事务发生死锁T1T2Slock BR(B)=2Xlock A等待等待Slock AR(A)=2Xlock B等待4141本章目录本章目录10.1 并发控制概述并发控制概述10.2 封锁封锁10.3 封锁协议封锁协议10.4 活锁和死锁活锁和死锁10.5 并发调度的可串行性并发调度的可串行性10.6 两段锁协议两段锁协议10.7 封锁的粒度封锁的粒度11.8 小结小结42421010.7 .7 封锁的粒度封锁的粒度n封锁粒度封锁粒度(Granularity)(Granularity)lX X锁和锁和S S锁都是锁都是加在加在 某一个数据对象上某一个数据对象上l封锁粒度即指封锁粒度

29、即指封锁封锁 对象的大小对象的大小封锁的对象封锁的对象l逻辑单元逻辑单元l物理单元物理单元例:在关系数据库中,封锁对象可以是:例:在关系数据库中,封锁对象可以是: 逻辑单元逻辑单元: 属性值、属性值的集合、元组、关系、属性值、属性值的集合、元组、关系、 索引项、整个索引、整个数据库等索引项、整个索引、整个数据库等 物理单元物理单元:页(数据页或索引页)、物理记录等:页(数据页或索引页)、物理记录等43431010.7 .7 封锁的粒度封锁的粒度n 封锁粒度的关系:封锁粒度的关系:n 选择封锁粒度:选择封锁粒度:考虑考虑封锁对象封锁对象和和并发度并发度两个因素两个因素, ,对系统开销与并发度进行

30、权衡。对系统开销与并发度进行权衡。l需要处理多个关系的大量元组的用户事务:以数据库为封锁单位;需要处理多个关系的大量元组的用户事务:以数据库为封锁单位;l需要处理大量元组的用户事务:以关系为封锁单元;需要处理大量元组的用户事务:以关系为封锁单元;l只处理少量元组的用户事务:以元组为封锁单位只处理少量元组的用户事务:以元组为封锁单位44441010.7.1 .7.1 多封锁粒度多封锁粒度n 多粒度封锁多粒度封锁(Multiple Granularity Locking)(Multiple Granularity Locking): 在一个系统中同时支持多种封锁粒度供不同的事务选择在一个系统中同时

31、支持多种封锁粒度供不同的事务选择l 多粒度树:以树形结构来表示多级封锁粒度,根结点是整个数据多粒度树:以树形结构来表示多级封锁粒度,根结点是整个数据库,表示最大的数据粒度;叶结点表示最小的数据粒度。库,表示最大的数据粒度;叶结点表示最小的数据粒度。45451010.7.1 .7.1 多封锁粒度多封锁粒度n 多粒度封锁协议:多粒度封锁协议: l 允许多粒度树中的每个结点被独立地加锁;允许多粒度树中的每个结点被独立地加锁;l 对一个结点加锁意味着这个结点的所有后裔结点也被加以同样对一个结点加锁意味着这个结点的所有后裔结点也被加以同样类型的锁;类型的锁;l 在多粒度封锁中一个数据对象可能是在多粒度封

32、锁中一个数据对象可能是显式封锁显式封锁或者或者隐式封锁隐式封锁 - -显式封锁显式封锁: :直接加到数据对象上的封锁直接加到数据对象上的封锁 - -隐式封锁隐式封锁: :该数据对象没有独立加锁,是由于该数据对象没有独立加锁,是由于其上级结点其上级结点 加锁而使该数据对象加锁而使该数据对象加上了锁加上了锁例如:事务例如:事务T T要对关系要对关系R1R1加加X X锁锁, ,需要检查如下的封锁冲突:需要检查如下的封锁冲突: 1. 1.系统必须搜索其上级结点数据库、关系系统必须搜索其上级结点数据库、关系R1R1 2. 2.还要搜索还要搜索R1R1的下级结点,即的下级结点,即R1R1中的每一个元组中的

33、每一个元组 3. 3.如果其中某一个数据对象已经加了不相容锁,则如果其中某一个数据对象已经加了不相容锁,则T T必须等待必须等待46461010.7.1 .7.1 多封锁粒度多封锁粒度n 对某个数据对象加锁,系统要检查:对某个数据对象加锁,系统要检查: l 该数据对象该数据对象 有无显式封锁与之冲突有无显式封锁与之冲突l 所有上级结点所有上级结点 检查本事务的显式封锁是否与该数据对象上的隐式封锁检查本事务的显式封锁是否与该数据对象上的隐式封锁 冲突冲突 ( (由上级结点已加的封锁造成的)由上级结点已加的封锁造成的)l 所有下级结点所有下级结点 看上面的显式封锁是否与本事务的隐式封锁看上面的显式

34、封锁是否与本事务的隐式封锁(将加到下(将加到下 级结点的封锁)级结点的封锁)冲突冲突如此检查,效率太低如此检查,效率太低! !意向锁(意向锁(intention lockintention lock)47471010.7.2 .7.2 意向锁意向锁n 意向锁(意向锁( intention lock intention lock):): l 如果对一个结点加意向锁,则说明该结点的下层结点正在被加锁如果对一个结点加意向锁,则说明该结点的下层结点正在被加锁l 对任一结点加基本锁,必须先对它的上层结点加意向锁对任一结点加基本锁,必须先对它的上层结点加意向锁 例如:对任一元组加锁时,必须先对它所在的数例

35、如:对任一元组加锁时,必须先对它所在的数 据库和关系加意向锁据库和关系加意向锁n 常用意向锁常用意向锁意向共享锁意向共享锁(Intent Share Lock(Intent Share Lock,简称,简称ISIS锁锁) )意向排它锁意向排它锁(Intent Exclusive Lock(Intent Exclusive Lock,简称,简称IXIX锁锁) )共享意向排它锁共享意向排它锁(Share Intent Exclusive Lock(Share Intent Exclusive Lock,简称,简称SIXSIX锁锁) )48481010.7.2 .7.2 意向锁意向锁n 意向共享锁意

36、向共享锁(Intent Share Lock(Intent Share Lock,简称,简称ISIS锁锁) )l 表示它的后裔结点拟加表示它的后裔结点拟加S S锁锁 例如:事务例如:事务T1T1要对数据库要对数据库D D中的关系中的关系R R中的某个元组加中的某个元组加S S锁,锁, 则要首先对则要首先对关系关系R R和和数据库数据库D D加加ISIS锁锁n 意向排它锁意向排它锁(Intent Exclusive Lock(Intent Exclusive Lock,简称,简称IXIX锁锁) )l 表示它的后裔结点拟加表示它的后裔结点拟加X X锁锁例如:事务例如:事务T1T1要对要对数据库数据

37、库D D中的关系中的关系R R中的中的某个元组加某个元组加X X锁,锁, 则要首先对则要首先对关系关系R R和和数据库数据库D D加加IXIX锁锁n 共享意向排它锁共享意向排它锁(Share Intent Exclusive Lock(Share Intent Exclusive Lock,简称,简称SIXSIX锁锁) )l 如果对一个数据对象加如果对一个数据对象加SIXSIX锁,表示对它加锁,表示对它加S S锁,再加锁,再加IXIX锁,锁, 即即SIX = S + IXSIX = S + IX例如:对某个表加例如:对某个表加SIXSIX锁,则表示该事务要锁,则表示该事务要: : - -读整个

38、表(所以要对该表加读整个表(所以要对该表加S S锁)锁) - -同时会更新个别元组(所以要对该表加同时会更新个别元组(所以要对该表加IXIX锁)锁)49491010.7.2 .7.2 意向锁意向锁n 意向锁相容矩阵意向锁相容矩阵 50501010.7.2 .7.2 意向锁意向锁n 锁的强度:锁的强度: 锁的强度是指它对其他锁的排斥程度锁的强度是指它对其他锁的排斥程度 一个事务在申请封锁时一个事务在申请封锁时以强锁代替弱锁是安全以强锁代替弱锁是安全的,反之则不然!的,反之则不然!n 具有意向锁的多粒度封锁方法(广泛应用在具有意向锁的多粒度封锁方法(广泛应用在DBMSDBMS中)中)l 申请封锁:

39、自上而下申请封锁:自上而下l 释放封锁:自下而上释放封锁:自下而上 例:事务例:事务T1T1要对关系要对关系R1R1加加S S锁锁 1. 1.要首先对数据库加要首先对数据库加ISIS锁锁 2. 2.检查数据库和检查数据库和R1R1是否已加了不相容的锁是否已加了不相容的锁(X(X或或IX) IX) 3. 3.不再不再需要搜索和检查需要搜索和检查R1R1中的中的元组元组是否加了不相容的锁是否加了不相容的锁(X(X锁锁) )锁强度锁强度偏序关系偏序关系5110.7.3 SQL Server中的并发控制中的并发控制第一个查询编辑器窗口:第一个查询编辑器窗口:begin tranupdate s set

40、 sdept =ISwhere sno=95003waitfor delay 00:01:00rollback transp_locksp_lockhttps:/ * from sys.databasesObjid表示对象表示对象ID: select * from sysobjects where id=725577623Type:封锁粒度:【封锁粒度:【DB:数据库、数据库、TAB:表、表、PG:页、页、EXT:簇、簇、RID:行标等】行标等】Status:当前锁状态:当前锁状态(GRANT获得、获得、WAIT被其它进程阻塞、被其它进程阻塞、CVNT当前锁正在转化当前锁正在转化)Mode:锁

41、模式:锁模式(S:共享锁、共享锁、U:修改锁、修改锁、X:排它锁、排它锁、IS共享意图锁、共享意图锁、IX排它意图锁排它意图锁)Resource: 如果是如果是page时,文件信息:时,文件信息:select * from sysfiles 发现发现page:1:93 :表示对第:表示对第1个文件的第个文件的第93页加页加IX锁,查看该页内容锁,查看该页内容dbcc traceon(3604) -将跟踪结果输出的屏幕将跟踪结果输出的屏幕dbcc page(student,1,93,1) -查看查看1:93的信息的信息5210.7.3 SQL Server中的并发控制中的并发控制53不同不同隔离

42、级别隔离级别的可能产生的现象的可能产生的现象隔离级别隔离级别脏读脏读不可重复读不可重复读幻读幻读丢失修改丢失修改未提交读已提交读可重复读可串行读:会出现该现象 :表示不会出现该现象10.7.3 SQL Server中的并发控制中的并发控制541 1)未提交读)未提交读第一个查询编辑器窗口:第一个查询编辑器窗口:begin tranupdate s set sdept =ISwhere sno=95004-commit tran-rollback tran第二个查询编辑器窗口:第二个查询编辑器窗口:set tran isolation level read uncommittedread unc

43、ommittedgoselect * from s where sno=95004脏数据10.7.3 SQL Server中的并发控制中的并发控制1.tran1若commit, tran2的结果?2.tran1若rollback, tran2的结果?552 2)已提交读)已提交读(SQL Server(SQL Server默认默认) )第一个查询编辑器窗口:第一个查询编辑器窗口:begin tranupdate s set sdept =ISwhere sno=95004-commit tran-rollback tran第二个查询编辑器窗口:第二个查询编辑器窗口:set tran isola

44、tion level read committedread committedgoselect * from s where sno=9500410.7.3 SQL Server中的并发控制中的并发控制tran1若commit或者rollback,tran2将自动进行查询!563 3)可重复读)可重复读第一个查询编辑器窗口:第一个查询编辑器窗口:set tran isolation level repeatable readgobegin transelect * from supdate s set sdept =CSSwhere sdept = CSselect * from s-roll

45、back tran第二个查询编辑器窗口:第二个查询编辑器窗口:set tran isolation level read committedgobegin traninsert into svalues(95005,新人1, 男,1985-08-01,CS)select * from s where sno=95005-rollback tran数据正常插入574 4)可串行读)可串行读第一个查询编辑器窗口:第一个查询编辑器窗口:set tran isolation level serializablegobegin transelect * from supdate s set sdept

46、=CSSwhere sdept = CSselect * from s-rollback tran第二个查询编辑器窗口:第二个查询编辑器窗口:set tran isolation level read committedgobegin traninsert into svalues(95005,新人1, 男,1985-08-01,CS)select * from s- rollback tran阻塞5810.7.3 SQL Server中的并发控制中的并发控制n SQL ServerSQL Server支持的锁机制:支持的锁机制:l NOLOCKNOLOCK(不加锁)(不加锁): : - -

47、在读取或修改数据时不加任何锁。在读取或修改数据时不加任何锁。 l HOLDLOCKHOLDLOCK(保持锁)(保持锁): : - - 将此共享锁保持至整个事务结束,而不会在途中释放。将此共享锁保持至整个事务结束,而不会在途中释放。l UPDLOCKUPDLOCK(修改锁)(修改锁) : : - - 在读取数据时使用修改锁来代替共享锁,在读取数据时使用修改锁来代替共享锁, 并将此锁保持至整个事务或命令结束。并将此锁保持至整个事务或命令结束。l TABLOCKTABLOCK(表锁)(表锁): : - - 将在整个表上置共享锁直至该命令结束。将在整个表上置共享锁直至该命令结束。 这个选项保证其他进程

48、只能读取而不能修改数据。这个选项保证其他进程只能读取而不能修改数据。 l PAGLOCKPAGLOCK(页锁)(页锁): : - - 此选项为默认选项,使用共享页锁。此选项为默认选项,使用共享页锁。l TABLOCKXTABLOCKX(排它表锁(排它表锁) ): : - - 将在整个表上置排它锁直至该命令或事务结束。将在整个表上置排它锁直至该命令或事务结束。 这将防止其他进程读取或修改表中的数据。这将防止其他进程读取或修改表中的数据。 select select * * from s where . from s where . with(holdlock)with(holdlock)这些选项

49、将使系统忽略原先用SET设定的事务隔离级别5959本章目录本章目录10.1 并发控制概述并发控制概述10.2 封锁封锁10.3 封锁协议封锁协议10.4 活锁和死锁活锁和死锁10.5 并发调度的可串行性并发调度的可串行性10.6 两段锁协议两段锁协议10.7 封锁的粒度封锁的粒度11.8 小结小结6060本章小结本章小结n 并发操作带来的数据不一致性问题并发操作带来的数据不一致性问题l修改丢失、不可重复读、脏数据修改丢失、不可重复读、脏数据n 数据库的并发控制通常使用封锁机制数据库的并发控制通常使用封锁机制l基本封锁(基本封锁(S S锁和锁和X X锁)锁)l封锁协议(三级封锁协议所能解决的数据不一致性问题)封锁协议(三级封锁协议所能解决的数据不一致性问题)l活锁和死锁活锁和死锁l多粒度封锁(多粒度树、意向锁)多粒度封锁(多粒度树、意向锁)n 并发事务调度的正确性并发事务调度的正确性l可串行性:两段锁协议可串行性:两段锁协议l冲突可串行性冲突可串行性 6161本章作业本章作业n 第五版教材:第五版教材: 本章课后本章课后9,10,149,10,14 6262本章作业本章作业n 第五版教材:第五版教材: 本章课后本章课后9,10,149,10,14 6363 完完

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(数据库事务课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|