1. 程式人生 > >資料庫—併發排程的可序列性

資料庫—併發排程的可序列性

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的值。