您的位置:首页 > 数据库

数据库—并发调度的可串行性

2017-12-27 15:00 183 查看

1.可串行化调度

数据库管理系统对并发事务不同的调度可能会产生不同的结果,比如两个事务T1和T2,先执行T1或者先执行T2产生的结果可能是不一样的。由于串行调度没有事务间的相互干扰,所以串行调度是正确的。另外,执行结果等价于串行调度的调度也是正确的,称为可串行化调度。

可串行化(Serializable)调度
多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同,称这样的调度策略为可串行化调度。
可串行性(Serializability) 
可串行性是并发事务正确调度的准则。可串行性调度规定,一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度。
比如,两个事务的并发调度的某一执行方式,与先执行T1后执行T2(或先执行T2后执行T1)的结果是一样的,称这一调度符合可串行化调度。
并发控制除了要保证数据的一致性之外,还要保证事务的调度是可串行化调度。

2.冲突可串行化调度

冲突可串行化,是一个比可串行化更严格的条件!

冲突操作:是指不同的事务对同一数据的读写操作和写写操作:

Ri(x)与Wj(x) /*事务Ti读x,Tj写x,其中i≠j*/

Wi(x)与Wj(x) /*事务Ti写x,Tj写x,其中i≠j*/

冲突操作的特点:涉及同一个数据库元素, 并且至少有一个是操作。

 

不冲突操作:

ri(X); rj(X) 两个相同对象的读操作不冲突  

wi(X); rj(Y), X不等于Y,两个不同对象的操作不冲突

wi(X); wj(Y), X不等于Y,两个不同对象的操作不冲突

不能交换(Swap)的动作:

同一事务的两个操作不能交换;

不同事务的冲突操作不能交换;

例如:Ri(x)与Wj(x)

   Wi(x)与Wj(x)

 

冲突可串行化

一个调度Sc在保证冲突操作的次序不变的情况下,通过交换两个事务不冲突操作的次序得到另一个调度Sc’,如果Sc’是串行的,称调度Sc是冲突可串行化的调度。若一个调度是冲突可串行化,则一定是可串行化的调度。
[例] 有3个事务的一个调度r3(B) r1(A) w3(B) r2(B) r2(A) w2(B)r1(B) w1(A),判断该调度是否是冲突可串行化的调度。
解:Sc1 = r3(B) r1(A) w3(B)r2(B) r2(A) w2(B) r1(B) w1(A)
由于r1(A)和w3(B)是对不同事务间的操作,所以不冲突,两个事务可以交换,由此得到:
r3(B) w3(B) r1(A) r2(B)r2(A) w2(B) r1(B) w1(A)
由于r1(A)和r2(B)r2(A) w2(B),要么都是对同一操作的读操作,要么是对不同对象的读写操作,所以不冲突,r1(A)可以与r2(B) r2(A) w2(B)交换,因此得到:
r3(B) w3(B) r2(B) r2(A) w2(B) r1(A)r1(B) w1(A)
所以:  Sc2 = r3(B) w3(B) r2(B) r2(A)w2(B) r1(A) r1(B) w1(A) ----> T3 T2 T1

因此Sc1是冲突可串行化的调度。
再例如:
Sd=r1(A)w1(A)r2(A)w2(A)r2(B)w2(B)r1(B)w1(B)
此例无论如何都不能通过无冲突交换将Sd变换为串行调度,因此Sd不是冲突可串行化的调度。

3.可串行化调度与冲突可串行化调度之间的关系

冲突可串行化调度一定是可串行化调度,但冲突可串行化调度只是可串行化调度的充分条件,不是必要条件。还有不满足冲突可串行化条件的可串行化调度。

[例]有3个事务,T1=W1(Y)W1(X),T2=W2(Y)W2(X),T3=W3(X)
调度L1=W1(Y)W1(X)W2(Y)W2(X)W3(X)是一个串行调度。
调度L2=W1(Y)W2(Y)W2(X)W1(X)W3(X)不满足冲突可串行化。
但是调度L2是可串行化的,因为L2执行的结果与调度L1相同,Y的值都等于T2的值,X的值都等于T3的值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: