问题 多项选择题

[说明]


某省会城市XX长途汽车售票系统负责所有本地长途汽车站各班次的汽车票销售,并在该省会城市和全省主要地级市设有多个该长途汽车票销售网点,各售票网点使用相同的售票程序。假设售票程序中用到的伪指令如表8-2所示。


假设某售票网点一次售出n张长途汽车班次A的汽车票,则售票程序的伪指令序列为:R(A,x);W(A,x-n)。根据上述业务及规则,完成下列问题。
1. 若两个售票网点同时销售长途汽车班次A的汽车票,在数据库服务器端可能出现如下的调度。

A:R1(A,x), R2(A,x), W1(A,x-3), W2(A,x-2);
B:R1(A,x), W1(A,x-3),R2(A,x), W2(A,x-2);
C:R1(A,x), R2(A,x), W2(A,x-2), W1(A,x-3);
其中Ri(A,x),Wi(A,x)分别表示第i个销售网点的读写操作,其余类同。
假设当前长途汽车班次A剩余15张汽车票,分析上述3个调度各自执行完后的剩余票数,并指出其中错误的调度,简要分析产生错误的主要原因。

答案

参考答案:(A)重写后的售票程序伪指令序列如下
Xlock(A); R(A,x); W(A,x-n); Unlock(A);
(B) ①封锁粒度与系统的并发度和并发控制的开销密切相关
② 封锁的粒度越大,并发度就越小,但系统开销就越小
③ 封锁的粒度越小,并发度就越高,但系统开销就越大

解析:
这是一道要求读者掌握2PL协议实际应用、封锁粒度与并发度之间关系的综合应用题,本题所涉及的知识点如下。
(1) 多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同时,称这种调度策略为可串行化(Serializable)的调度。
可串行性(Serializability)是并发事务正确性的准则。按这个准则规定,一个给定的并发调度,当且仅当它是可串行化时,才认为是正确的调度。换而言之,事务并发调度是否正确,可通过对非冲突语句进行交换,若最终将并发调度通过交换非冲突语句转换成串行调度,则该并发调度为可串行化调度,可串行化调度被作为事务并发执行正确性的准则。
事务的提交是随机的,事务程序使用加锁可以实现并发事务的隔离性,使用两段锁协议(2PL)可以保证事务调度的可串行化。两段锁协议是指对数据读之前先加读锁,写前加写锁,事务只有获得相应的锁才能操作数据,加解锁过程分为两个阶段,前一阶段只能加锁,后一阶段只能解锁,不允许有交叉。两段锁协议是保证并发事务可串行化调度的充分条件。
针对题干所给出的伪指令操作序列:R(A,x);W(A,x-n),在事务读取数据之前加SLock()指令,写数据之前加XLock()指令,并保证读/写锁不交叉,即满足两段锁协议。重写后的售票程序伪指令序列如下。
XLock(A); R(A,x); W(A,x-n); Unlock(A);
(2) 封锁对象的大小称为封锁的粒度(Granularity)。封锁的对象可以是逻辑单元,也可以是物理单元。在关系数据库中,封锁对象可以是属性值、属性值集合、元组、关系、索引项、整个索引,以及整个数据库等逻辑单元,也可以是页(数据页或索引页)、块等物理单元。封锁对象可以很大,比如对整个数据库加锁,也可以很小,比如只对某个属性值加锁。X锁和S锁都是加在某一个数据对象上的。
封锁粒度与系统的并发度和并发控制的开销密切相关。封锁的粒度越大,并发度就越小,但系统的开销也就越小;反之,封锁的粒度越小,并发度就越高,但系统开销也就越大。由此可见,在一个系统中同时存在不同大小的封锁单元供不同的事务选择使用是比较理想的。而选择封锁粒度时必须同时考虑封锁机构和并发度两个因素,对系统开销与并发度进行权衡,以求得最优的效果。通常,需要处理大量元组的用户事务可以以关系为封锁单元,而对于一个处理少量元组的用户事务,可以以元组为封锁单位以提高并发度。

填空题
单项选择题