若这三个事务允许并行执行,则请列举出有多少可能的正确结果。 若这三个事务都遵守两段锁协议,那么是否存在事实上可串行化但又不能形成的调度?

admin2009-02-15  34

问题 若这三个事务允许并行执行,则请列举出有多少可能的正确结果。
若这三个事务都遵守两段锁协议,那么是否存在事实上可串行化但又不能形成的调度?

选项

答案存在。

解析 在并行系统环境下,事务并发操作的调度的可串行性的标准如下:
调度结果的正确:保持数据库的一致状态。几个事务的并行执行是正确的,当且仅当其结果与按某一次序串行的执行它们时的结果相同。可串行性是并行事务正确性的唯一准则。
因此,若有3个事务并行执行时,可能的正确结果与3个事务串行执行的结果应该相同。由于3个事务串行执行有6种可执行方案,因此有6种可能的正确结果。若事务不施加任何锁,数据项则可以同时被读写。假设Ri,Rj,Rk分别表示三种检索操作R1,R2,R3,顺序无关紧要;类似地,Up,Uq,Ur分别表示更新操作U1, U2,U3,顺序也无关紧要。但事务内部操作顺序是固定的。因此,可能的调度是:
Ri-Rj -Rk-Up-Uq-Ur:3*2*1*3*2*1=36
Ri-Rj-Up -Rk- Uq-Ur:3* 2* 2*1*2*1=24
Ri-Rj-Up-Uq-Rk-Ur:3*2*2*1*1*1=12
Ri-Up-Rj-Rk-Uq-Ur:3*1*2*1*2*1=12
Ri-Up-Rj-Uq-Rk-Ur:3*1*2*1*1*1=6
由此可见,总共有90种可能的调度。本例能够产生“正确”结构但不可串行化的调度。例如:调度R1- R2-R3-U3-U2-U1得到的结果与6个可能的串行调度中的两个相同。这样,对于给定的初始值。恰好是“正确的”。但必须清楚这个正确只是巧合,完全是因为初始值恰好为。才得到的,对其他的初始值则未必如此。例如,考虑初始值为10而非0的情况,上面给出的调度R1- R2-R3-U3-U2-U1就不能得到正确的结果。因此,该调度是不可串行的。调度R1-R3 -U1-U3-R2-U2是可串行的(等价于串行调度T1-T3-T2),但在T1,T2和T3都遵守两段锁协议时不能出现。因为在这一协议下,操作R3会代表事务T3.在A上获得s锁;这样事务T1中的操作U1就无法在该锁释放前进行,且直到T3结束时才会发生。事实上,事务T3和T1在操作U3到达时将发生死锁。
转载请注明原文地址:https://kaotiyun.com/show/Z5DZ777K
0

相关试题推荐
最新回复(0)