教学单元7 数据库并发

1. 数据库并发访问时会出现哪些问题?

2. 什么是封锁?

3. 什么是封锁协议?基本的封锁协议有哪些?

4. 什么是活锁?试述其产生的原因及解决的方法。

5. 什么是死锁?试述其产生的原因及解决的方法。

6. 请给出预防死锁的方法。

7. 什么是并发调度的可串行化?

8. T1,T2是如下两个事务:

T1:A:=A+2, B:=B*2;

T2:A:=A*2, B:=B+2;

AB的初值都为0;

(1) 若这两个事务允许并发执行,则有多少种可能的正确结果,请一一列举出来;

(2) 请给出一个可串行化的调度,并给出执行结果;

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

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

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

9. 举例说明两段锁协议的概念。

10 请说明意向锁的含义是什么?它包含哪些种?

11 填空题

(1) 常用的封锁有(         )和 (         )。

(2) 事务在修改数据R之前必须先对其加X锁,直到事务结束才释放,称为(    )协议。

(3) 如果多个事务依次执行,则称为事务的(         );如果利用分时的方法,同时处理多个事务,则称为事务的(         )。

(4) 如果一个事务并发调度的结果与某一串行调度执行结果等价,则这个并发调度称为(         ),否则,是(         )。

(5) 使事务永远处于等待状态,得不到执行的现象称为(         )。有两个或两个以上的事务处于等待状态,每个事务都在等待其中另一个事务解除封锁,它才能继续下去,结果任何一个事务都无法执行,这种现象称为(         )。

(6) 多粒度封锁中的一个数据对象有(         )和(         )两种方式加锁。

 


 

习题七答案

1答

丢失修改,不可重复读,读脏数据

2答

封锁是使事务对它要操作的数据有一定的控制能力。封锁具有三个环节:第一环节是申请加锁;第二个环节是获得锁;第三个环节是释放锁。

3答

在对外数据对象加锁时,还需要约定一些规则,这些规则称为封锁协议。

一级封锁协议:是事务T在修改数据之前必须先对其加X锁,直到事务结束才释放,一级封锁协议可有效的防止丢失修改,并能够保证事务T的可恢复性。一级封锁协议由于没有对数据进行加锁,所以不能保证可重复读和不读“脏”数据。

二级封锁协议:是事务T对要修改的数据必须先加X锁,直到事务结束才释放X锁;要读取的数据必须先加S锁,读完后即可释放S锁。二级封锁协议不但能够防止丢失修改,还可进一步防止读“脏”数据。

三级封锁协议:是事务T在读取数据之前必须先对其加S锁,在要修改数据之前必须先对其加X锁,直到事务结束后才释放所有锁。由于三级封锁协议强调即使事务读完之后也不释放S锁,从而使的别的事务无法更改数据A。三级封锁协议不但防止了丢失修改和不读“脏‘数据,才读。

4答

在多个事务请求对同一数据加锁时,总是使某一用户等待得情况称为活锁

活锁是封锁的无序造成的。解决方法是采用先来先去服务的方法,即对要求封锁数据的事务排队,使前面的事务先获得数据的封锁权。

5答

多事务交错等待得僵持局面称为死锁。

预防死锁通常有以下两种方法:

①一次封锁法,就是要求每个事务必须一次将所有要使用的数据全部加锁,否则该事务不能继续执行;

     顺序封锁法,是预先对数据对象规定一个封锁顺序,搜有事务都按这个顺序实行封锁。

6答

检测死锁发生的一种方法是选择一个处理死锁代价最小的事务,将其撤销,释放此事务持有的所有锁,使其他事务得以继续运行下去。

解除死锁问题有两类方法:一类方法是采用一定措施来预防死锁的发生;另一类方法是允许发生死锁,然后采用一定手段定期诊断系统中有无死锁,若有则解除之。

7答

多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同。我们称这种调度策略为可串行化(Serializable)的调度。

8答

(1)

(2)

(3)

(4)

(5)

 

9答

所谓两段锁协议是指所有事务必须分两个阶段对数据项进行加锁和解锁;

1       在对任何数据进行读,写操作之前,首先要申请并获得对该数据的加锁;

2       在释放一个封锁之后,事务不再申请并获得对该数据的封锁

即每个事务分成两个阶段,第一阶段是申请和获得封锁,也称为扩展阶段。在这阶段,事务可以申请获得任何数据项上的任何类型的锁,但是不能再申请任何锁。

XLOCK A,XLOCK B,SLOCK C ... UNLOCK A,UNLOCK B ,UNLOCK C...

10答

 事务T要对关系R1X锁时,系统只需检查根节点数据库和关系R1是否已加入了不相容的锁,而不再需要搜索和检查R1中的每一个元组是否加了X锁,对任一元组加锁,必须先对他所在的关系加意向锁。意向的含义是:如果对一个节点加意向锁,则说明该节点的下层节点正在被加锁;对任何一结加锁时,必须先对它的上层节点加意向锁。

11答

(1)排它锁和共享锁

(2)三级

(3)串行调度,并行调度

(4)可串行化调度,非串行化调度

(5)活锁,死锁

(6)显式和隐式封锁