DBMS 中不同型別的排程是什麼?


排程被定義為事務的執行序列。排程維護每個單獨事務中操作的順序。排程是事務操作的安排。排程可能包含一組事務。我們已經知道事務是一組操作。為了併發執行事務,我們以交錯的方式安排或排程它們的操作。

排程分為 2 類,如下所示:

  • 序列排程
  • 非序列排程

以下是用圖表形式給出的排程類別:

序列排程

此排程中存在的事務按順序執行,在 Ti 的指令完成之後,Tj 的指令將被執行,其中 j=i+1。

序列排程保證一致性:

  • 對於 2 個事務,可能的序列排程的總數 = 2。

  • 對於 3 個事務,可能的序列排程的總數 = 6。

 2 Transaction      3 Transaction
   T1->T2           T1->T2->T3
   T2->T1           T1->T3->T2
                    T2->T1->T3
                    T2->T3->T1
                    T3->T1->T2
                    T3->T2->T1

如果 n = 事務數,則可能的序列排程的數量 = n!。

序列排程始終給出正確的結果。但是,為了提高時間效率,我們遵循併發排程。因此,我們必須確保併發排程的可序列化。

非序列排程

當事務在事務 T1 和 T2 之間重疊時。

示例

T1T2
READ1(A)
WRITE1(A)

READ2(B)

WRITE2(B)
READ1(B)
WRITE1(B)
READ1(B)

非序列排程的型別

非序列排程分為可序列化和非序列排程。讓我們首先討論可序列化。

可序列化有兩種型別,如下所示:

檢視可序列化

如果排程與序列排程檢視等效,則該排程為檢視可序列化。

它遵循的規則如下:

  • T1 讀取 A 的初始值,然後 T2 也讀取 A 的初始值。

  • T1 讀取 T2 寫入的值,然後 T2 也讀取 T1 寫入的值。

  • T1 正在寫入最終值,然後 T2 也具有寫入操作作為最終值。

衝突可序列化

它以與某些序列執行相同的方式對任何衝突操作進行排序。如果兩個操作作用於相同的資料項並且其中一個是寫入操作,則稱這兩個操作衝突。

這意味著,

  • Readi(x) readj(x) - 非衝突讀-讀操作

  • Readi(x) writej(x) - 衝突讀-寫操作。

  • Writei(x) readj(x) - 衝突寫-讀操作。

  • Writei(x) writej(x) - 衝突寫-寫操作。

非序列排程分為可恢復和不可恢復排程。讓我們首先了解可恢復排程。

可恢復排程

考慮以下示例:

T1T2
R(X)
W(X)

W(X)

R(X)
READ1(B)
提交

提交

這裡,事務 T2 讀取事務 T1 寫入的值,並且 T2 的提交發生在 T1 的提交之後。因此,這是一個可恢復排程。

同樣,**可恢復排程又分為級聯避免和嚴格排程**:

  • 級聯避免排程

以下是級聯避免排程的示例:

T1T2
R(X)
W(X)

W(X)
提交

R(X)

提交

這裡,事務 T2 僅在事務 T1 提交後讀取 **X** 的更新值。因此,該排程為 **級聯避免排程**。

  • 嚴格排程

以下是嚴格排程的示例:

T1T2
R(X)

R(X)
W(X)
提交

W(X)

R(X)

提交

這裡,事務 T2 僅在事務 T1 提交後讀取和寫入事務 T1 的更新或寫入值。因此,該排程為 **嚴格排程**。

現在讓我們看看不可恢復排程。

不可恢復排程

不可恢復的排程就是不可恢復的。如果 Ti 的提交操作沒有發生在 Tj 的提交操作之前,則它是不可恢復的。

考慮以下給出的不可恢復排程的示例:

排程 1

T1T2
read(x)
x=x-n
write(x)

read(x)

x=x+n

write(x)

提交

排程 2

T1T2
read(a)
a=a+5
write(a)

read(a)
提交

更新於: 2021-07-08

14K+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

開始
廣告