《数据库系统概论》第四版 - 课后习题答案 联系客服

发布时间 : 星期五 文章《数据库系统概论》第四版 - 课后习题答案更新完毕开始阅读

最后结果 A 为 16 ,是可串行化的调度。

( 3 )请给出一个非串行化的调度,并给出执行结果。 答:

最后结果 A 为 0 ,为非串行化的调度。

( 4 )若这 3 个事务都遵守两段锁协议,请给出一个不产生死锁的可串行化调度。

答:

( 5 )若这 3 个事务都遵守两段锁协议,请给出一个产生死锁的调度。

答:

11.试证明,若并发事务遵守两段锁协议,则对这些事务的并发调度是可串行化的。

证明:首先以两个并发事务 Tl 和T2为例,存在多个并发事务的情形可以类推。根据可串行化定义可知,事务不可串行化只可能发生在下列两种情况: ( l )事务 Tl 写某个数据对象 A ,T2读或写 A ; ( 2 )事务 Tl 读或写某个数据对象 A ,T2写 A 。 下面称 A 为潜在冲突对象。

设 Tl 和T2访问的潜在冲突的公共对象为{A1,A2 ? , An }。不失一般性,假设这组潜在冲突对象中 X =(A 1 , A2 , ? , Ai }均符合情况 1 。 Y ={A i + 1 , ? , An }符合所情况( 2 )。

VX ∈ x , Tl 需要 XlockX ①

T2 需要 Slockx 或 Xlockx ②

1 )如果操作 ① 先执行,则 Tl 获得锁,T2等待

由于遵守两段锁协议, Tl 在成功获得 x 和 Y 中全部对象及非潜在冲突对象的锁后,才会释放锁。

这时如果存在 w ∈ x 或 Y ,T2已获得 w 的锁,则出现死锁;否则, Tl 在对 x 、 Y 中对象全部处理完毕后,T2才能执行。这相当于按 Tl 、T2的顺序串行执行,根据可串行化定义, Tl 和几的调度是可串行化的。

2 )操作 ② 先执行的情况与( l )对称因此,若并发事务遵守两段锁协议,在不发生死锁的情况下,对这些事务的并发调度一定是可串行化的。证毕。

12 .举例说明,对并发事务的一个调度是可串行化的,而这些并发事务不一定遵守两段锁协议。 答:

13 .为什么要引进意向锁?意向锁的含义是什么?

答:引进意向锁是为了提高封锁子系统的效率。该封锁子系统支持多种封锁粒度。原因是:在多粒度封锁方法中一个数据对象可能以两种方式加锁 ― 显式封锁和隐式封锁。因此系统在对某一数据对象加锁时不仅要检查该数据对象上有无(显式和隐式)封锁与之冲突,还要检查其所有上级结点和所有下级结点,看申请的封锁是否与这些结点上的(显式和隐式)封锁冲突,显然,这样的检查方法效率很低。为此引进了意向锁。意向锁的含义是:对任一结点加锁时,必须先对它的上层结点加意向锁。例如事务 T 要对某个元组加 X 锁,则首先要对关系和数据库加 ix 锁。换言之,对关系和数据库加 ix 锁,表示它的后裔结点 ― 某个元组拟(意向)加 X 锁。引进意向锁后,系统对某一数据对象加锁时不必逐个检查与下一级结点的封锁冲突了。例如,事务 T 要对关系 R 加 X 锁时,系统只要检查根结点数据库和 R 本身是否已加了不相容的锁(如发现已经加了 ix ,则与 X 冲突),而不再需要搜索和检查 R 中的每一个元组是否加了 X 锁或 S 锁。

14 .试述常用的意向锁: IS 锁、 ix 锁、 SIX 锁,给出这些锁的相容矩阵。

答: IS锁:如果对一个数据对象加 IS 锁,表示它的后裔结点拟(意向)加 S 锁。例如,要对某个元组加 S 锁,则要首先对关系和数据库加 IS 锁

IX 锁:如果对一个数据对象加 ix 锁,表示它的后裔结点拟(意向功口 X 锁。例如,要对某个元组加 X 锁,则要首先对关系和数据库加 ix 锁。

SIX 锁:如果对一个数据对象加 SIX 锁,表示对它加 S 锁,再加 IX 锁,即 SIX = S + IX 。 相容矩阵:

15 .理解并解释下列术语的含义:封锁、活锁、死锁、排它锁、共享锁、并发事务的调度、可串行化的调度、两段锁协议。 答:(略,已经在上面有关习题中解答)

16 .试述你了解的某一个实际的 DBMS 产品的并发控制机制。 答:(略,参见简单介绍了有关 Oracle 的并发控制机制。)