《2022年数据库第四版答案并发控制收集 .pdf》由会员分享,可在线阅读,更多相关《2022年数据库第四版答案并发控制收集 .pdf(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据库第四版答案数据库第四版答案( ( 王珊萨师煊萨师煊) ) 第 11 章 并发控制1在数据库中为什么要并发控制?答:数据库是共享资源,通常有许多个事务同时在运行答:数据库是共享资源,通常有许多个事务同时在运行。当多个事务并发地存取数据库时就会产生同时读取和或修改同一数据的情况改同一数据的情况。若对并发操作不加控制就可能会存取和存储不正确的数据存储不正确的数据,破坏数据库的一致性破坏数据库的一致性。所以数据库管理系统必须提供并发控制机制。2 并发操作可能会产生哪几类数据不一致?用什么方法能避免各种不一致的情况?答:并发操作带来的数据不一致性包括三类:丢失修改答:并发操作带来的数据不一致性包括
2、三类:丢失修改、不可重复读和读可重复读和读“ “ 脏 夕数据。 ( l)丢失修改丢失修改( ( lostupdate)两个事务Tl和 T2 读入同一数据并修改,读入同一数据并修改, T2 T2 提交的结果破坏了(覆盖了)Tl提交的结果,导致Tl的修改被丢失的修改被丢失。 。( 2 )不可重复读(Non 一 RepeatableRead ) 不可重复读是指事务Tl读取数据后,事务几执行更新操作,使Tl无法再现前一次读取结果无法再现前一次读取结果。 。 ( 3 ) 读“ 脏” 数据 ( DirtyRead )读“脏夕数据是指事务Tl修改某一数据修改某一数据, ,并将其写回磁盘,事务几读取同一数据后
3、,Tl由于某种原因被撤销由于某种原因被撤销,这时 Tl已修改过的数据恢复原值已修改过的数据恢复原值, ,几读到的数据就与数据库中的数据不一致中的数据不一致,则几读到的数据就为则几读到的数据就为“脏”数据数据, ,即不正确的数据确的数据。 。避免不一致性的方法和技术就是并发控制避免不一致性的方法和技术就是并发控制。最常名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 13 页 - - - - - - - - - 用的技术是封锁技术用的技术是封锁技术。也可以用其他技术也可以用其
4、他技术,例如在分布式数据库系统中可以采用时间戳方法来进行并发控制。3 什么是封锁?基本的封锁类型有几种?试述它们的含义。答:封锁就是事务T 在对某个数据对象例如表、记录等操作之前,先向系统发出请求,对其加锁。加锁后事务T 就对该数据对象有了一定的控制对该数据对象有了一定的控制, ,在事务T 释放它的锁之前释放它的锁之前,其他的事务不能更新此数据对象其他的事务不能更新此数据对象。 。封锁是实现并发控制的一个非常重要的技术。基本的封锁类型有两种:排它锁(ExclusiveLocks ,简称x 锁)和共享锁( Share LocksLocks,简称,简称S 锁) 。排它锁又称为写锁。若事务T 对数据
5、对象A 加上X 锁,则只允许T 读取和修改A ,其他任何事务都不能再对A 加任何类型的锁何类型的锁, ,直到T 释放 A 上的锁上的锁。 。这就保证了其他事务在 T 释放A 上的锁之前不能再读取和修改A 。共享锁又称为读锁。若事务T 对数据对象A 加上S 锁,则事务T可以读A 但不能修改A ,其他事务只能再对A 加 S 锁,而不能加X 锁,直到T 释放A 上的 S 锁。这就保证了其他事务可以读A ,但在 T 释放A 上的S 锁之前不能对A做任何修改。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - -
6、 - - 第 2 页,共 13 页 - - - - - - - - - 4 如何用封锁机制保证数据的一致性?答: DBMS在对数据进行读在对数据进行读、写操作之前首先对该数据执行封锁操作,例如下图中事务Tl在对A 进行修改之前先对A 执行 xock ( A ) ,即对A 加 x 锁。这样,当几请求对A 加 x 锁时就被拒绝锁时就被拒绝, ,几只能等待Tl释放 A 上的锁后才能获得对A 的 x 锁,这时它读到的A 是 Tl更新后的值更新后的值, ,再按此新的A 值进行运算。这样就不会丢失Tl的更新。DBMS按照一定的封锁协议,对并发操作进行控制,使得多个并发操作有序地执行个并发操作有序地执行,
7、,就可以避免丢失修改就可以避免丢失修改、不可重复读和读和读“ “脏夕数据等数据不一致性。5 什么是活锁?什么是死锁?答:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 13 页 - - - - - - - - - 如果事务Tl封锁了数据R ,事务几又请求封锁R ,于是几等待几等待。 。几也请求封锁R ,当 Tl释放了R 上的封锁之后系统首先批准了几的请求系统首先批准了几的请求, ,几仍然等待几仍然等待。 。然后几又请求封锁R ,当几释放了R 上的封锁之后系统又批准了几的请
8、求 几有可能永远等待,这就是活锁的情形。活锁的含义是该等待事务等待时间太长含义是该等待事务等待时间太长, ,似乎被锁住了似乎被锁住了, ,实际上可能被激活能被激活。 。 如果事务Tl封锁了数据Rl , 几封锁了数据凡几封锁了数据凡,然后Tl又请求封锁几又请求封锁几, ,因几已封锁了几因几已封锁了几,于是Tl等待几释放几上的锁。接着几又申请封锁Rl ,因Tl已封锁了Rl ,几也只能等待Tl释放 Rl 上的锁上的锁。 。这样就出现了Tl在等待几在等待几, ,而几又在等待T 的局面的局面, , T 和几两个事务永远不能结束,形成死锁。名师资料总结 - - -精品资料欢迎下载 - - - - - -
9、- - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 13 页 - - - - - - - - - 6 试述活锁的产生原因和解决方法。答:活锁产生的原因活锁产生的原因:当一系列封锁不能按照其先后顺序执行时行时, ,就可能导致一些事务无限期等待某个封锁就可能导致一些事务无限期等待某个封锁,从而导致活锁活锁。 。避免活锁的简单方法是采用先来先服务的策略避免活锁的简单方法是采用先来先服务的策略。当多个事务请求封锁同一数据对象时个事务请求封锁同一数据对象时, ,封锁子系统按请求封锁的先后次序对事务排队先后次序对事务排队,数据对象上的锁一旦释放就批准申
10、请队列中第一个事务获得锁。11 请给出检测死锁发生的一种方法,当发生死锁后如何解除死锁?答:数据库系统一般采用允许死锁发生数据库系统一般采用允许死锁发生, DBMS检测到死锁后加以解除的方法后加以解除的方法。 DBMS中诊断死锁的方法与操作系统类似,一般使用超时法或事务等待图法一般使用超时法或事务等待图法。 。超时法是超时法是: :如果一个事务的等待时间超过了规定的时限,就认为发生了死锁事务的等待时间超过了规定的时限,就认为发生了死锁。超时法实现简单时法实现简单, ,但有可能误判死锁但有可能误判死锁,事务因其他原因长时间等待超过时限时等待超过时限时,系统会误认为发生了死锁系统会误认为发生了死锁
11、。 。若时限设置得太长太长, ,又不能及时发现死锁发生又不能及时发现死锁发生。 。 DBMS并发控制子系统检测到死锁后测到死锁后, ,就要设法解除就要设法解除。 。通常采用的方法是选择一个处理死锁代价最小的事务理死锁代价最小的事务, ,将其撤消将其撤消, ,释放此事务持有的所有锁,使其他事务得以继续运行下去使其他事务得以继续运行下去。 。当然当然, ,对撤销的事务所执行的数据修改操作必须加以恢复。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 13 页 - - - - -
12、 - - - - 12 什么样的并发调度是正确的调度?答:可串行化(Serializable)的调度是正确的调度)的调度是正确的调度。 。可串行化的调度的定义串行化的调度的定义:多个事务的并发执行是正确的多个事务的并发执行是正确的, ,当且仅当其结果与按某一次序串行执行它们时的结果相同仅当其结果与按某一次序串行执行它们时的结果相同,称这种调度策略为可串行化的调度。9 设 Tl,几,几是如下的3 个事务:Tl:A := A + 2 ;T2T2:A := A * 2 ;T3T3:A := A *2;( A -A*A-A*A)设 A 的初值为0 。( l)若这3 个事务允许并行执行,则有多少可能的正
13、确结果,请一一列举出来。答 :A 的最终结果可能有2 、 4 、 8 、 16 。因为串行执行次序有Tl T2T3T2T3 、 Tl T3T2T3T2 、T2T1T3T2T1T3 、T2T3Tl 、T3T1T2T3T1T2 、T3T2Tl。对应的执行结果是16 、 8 4 2 4 2 。( 2 )请给出一个可串行化的调度,并给出执行结果答:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 13 页 - - - - - - - - - 最后结果A 为 16 ,是可串行化的调度
14、。( 3 )请给出一个非串行化的调度,并给出执行结果)请给出一个非串行化的调度,并给出执行结果。答:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 13 页 - - - - - - - - - 最后结果A 为 0 ,为非串行化的调度。( 4 )若这3 个事务都遵守两段锁协议,请给出一个不产生死锁的可串行化调度。答:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第
15、8 页,共 13 页 - - - - - - - - - ( 5 )若这3 个事务都遵守两段锁协议,请给出一个产生死锁的调度。答:1111试证明试证明, ,若并发事务遵守两段锁协议若并发事务遵守两段锁协议, ,则对这些事务的并发调度是可串行化的。证明:首先以两个并发事务Tl和 T2 为例,存在多个并发事务的情形可以类推事务的情形可以类推。根据可串行化定义可知根据可串行化定义可知,事务不可串行化只可能发生在下列两种情况:( l)事务Tl写某个数据对象A ,T2 读或写A ;( 2 )事务Tl读或写某个数据对象A ,T2 写 A 。下面称A 为潜在冲突对象。设 Tl和 T2 访问的潜在冲突的公共对
16、象为访问的潜在冲突的公共对象为A1 A1A1,A2 ,An 。不失一般性,假设这组潜在冲突对象中X (A 1 ,A2 , , Ai均符合情况1 。 Y A i + 1 , ,An 符合所情况(2 ) 。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 13 页 - - - - - - - - - VX x ,Tl需要XlockXT2 需要 Slockx或 Xlockx1 )如果操作 先执行,则Tl获得锁,获得锁, T2T2 等待由于遵守两段锁协议,Tl在成功获得x 和 Y
17、中全部对象及非潜在冲突对象的锁后,才会释放锁。这时如果存在w x 或 Y ,T2 已获得w 的锁,则出现死锁出现死锁; ;否则否则, Tl在对x 、 Y 中对象全部处理完毕后中对象全部处理完毕后, ,T2 才能执行。这相当于按Tl、T2 的顺序串行执行,根据可串行化定义,Tl和几的调度是可串行化的。2 )操作 先执行的情况与(l)对称因此,若并发事务遵守两段锁协议务遵守两段锁协议,在不发生死锁的情况下在不发生死锁的情况下, ,对这些事务的并发调度一定是可串行化的。证毕。12 举例说明,对并发事务的一个调度是可串行化的,而这些并发事务不一定遵守两段锁协议。答:名师资料总结 - - -精品资料欢迎
18、下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 13 页 - - - - - - - - - 13 为什么要引进意向锁?意向锁的含义是什么?答:引进意向锁是为了提高封锁子系统的效率引进意向锁是为了提高封锁子系统的效率。该封锁子系统支持多种封锁粒度统支持多种封锁粒度。原因是原因是: :在多粒度封锁方法中一个数据对象可能以两种方式加锁 显式封锁和隐式封锁显式封锁和隐式封锁。因此系统在对某一数据对象加锁时不仅要检查该数据对象上有无(显式和隐式显式和隐式) )封锁与之冲突封锁与之冲突, ,还要检查其所有上级结点和
19、所有下级结点和所有下级结点,看申请的封锁是否与这些结点上的看申请的封锁是否与这些结点上的( (显式和隐式和隐式) )封锁冲突封锁冲突, ,显然显然, ,这样的检查方法效率很低这样的检查方法效率很低。 。为此引进了意向锁引进了意向锁。 。意向锁的含义是意向锁的含义是:对任一结点加锁时对任一结点加锁时,必须先对它的上层结点加意向锁。例如事务T 要对某个元组加X 锁,则首先要对关系和数据库加ix锁。换言之换言之, ,对关系和数据库加ix锁,表示它的后裔结点 某个元组拟某个元组拟( (意向)加X 锁。引进意向锁后,系统对某一数据对象加锁时名师资料总结 - - -精品资料欢迎下载 - - - - - -
20、 - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 13 页 - - - - - - - - - 不必逐个检查与下一级结点的封锁冲突了不必逐个检查与下一级结点的封锁冲突了。 例如例如, , 事务T 要对关系R 加 X 锁时,系统只要检查根结点数据库和R 本身是否已加了不相容的锁(如发现已经加了ix, 则与 X 冲突) ,而不再需要搜索和检查R 中的每一个元组是否加了X锁或S 锁。14 试述常用的意向锁试述常用的意向锁: IS 锁、 ix锁、 SIX 锁,给出这些锁的相容矩阵。答:IS 锁:如果对一个数据对象加IS 锁,表示它的后裔结点拟
21、(意向)加S 锁。例如,要对某个元组加S 锁,则要首先对关系和数据库加IS 锁IX 锁:如果对一个数据对象加ix锁,表示它的后裔结点拟(意向功口X 锁。例如,要对某个元组加X 锁,则要首先对关系和数据库加ix锁。SIX 锁:如果对一个数据对象加SIX 锁,表示对它加S 锁,再加IX 锁,即SIX = S + IX 。相容矩阵:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 13 页 - - - - - - - - - 15 理解并解释下列术语的含义:封锁、活锁、死锁、排它锁它锁、 、共享锁共享锁、 、并发事务的调度并发事务的调度、可串行化的调度可串行化的调度、两段锁协议。答: (略,已经在上面有关习题中解答)16 试述你了解的某一个实际的DBMS产品的并发控制机制。答: (略,参见简单介绍了有关Oracle的并发控制机制的并发控制机制。 )名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 13 页 - - - - - - - - -
限制150内