什麼是DBMS中的樂觀併發控制?


所有資料項在事務結束時更新,如果發現任何資料項與其中的值不一致,則回滾事務。

在事務結束時檢查衝突。事務執行期間不進行檢查。所有檢查一次性完成,因此事務執行開銷低。更新在事務結束之前不應用。它們應用於事務空間中的本地副本。

階段

樂觀併發控制有三個階段,如下所述:

讀取階段

讀取各種資料項並將其儲存在臨時變數(本地副本)中。所有操作都在這些變數中執行,而無需更新資料庫。

驗證階段

檢查所有併發資料項以確保可序列化,如果事務更新實際上應用於資料庫,則不會進行驗證。任何值的更改都會導致事務回滾。使用事務時間戳並維護寫集和讀集。

要檢查事務 A 是否不會干擾事務 B,必須滿足以下條件:

  • TransB 在 TransA 開始讀取階段之前完成其寫入階段。

  • TransA 在 TransB 完成其寫入階段後開始其寫入階段,並且 TransA 的讀集與 TransB 的寫集沒有共同項。

  • TransA 的讀集和寫集與 TransB 的寫集都沒有共同項,並且 TransB 在 TransA 完成其讀取階段之前完成其讀取階段。

寫入階段

如果驗證成功,則將事務更新應用於資料庫。否則,將丟棄更新並中止和重新啟動事務。它不使用任何鎖,因此沒有死鎖,但是可能會發生資料項的飢餓問題。

問題

S: W1(X), r2(Y), r1(Y), r2(X).

T1 -3

T2 – 4

檢查時間戳排序協議是否允許排程 S。

解決方案

最初對於資料項 X,RTS(X)=0,WTS(X)=0

最初對於資料項 Y,RTS(Y)=0,WTS(Y)=0

For W1(X) : TS(Ti)<RTS(X) i.e.
   TS(T1)<RTS(X)
TS(T1)<WTS(X)
3<0 (FALSE)

=>轉到 else 並執行寫入操作 w1(X) 和 WTS(X)=3

For r2(Y): TS(T2)<WTS(Y)
   4<0 (FALSE)

=>轉到 else 並執行讀取操作 r2(Y) 和 RTS(Y)=4

For r1(Y) :TS(T1)<WTS(Y)
   3<0 (FALSE)

=>轉到 else 並執行讀取操作 r1(Y)。

For r2(X) : TS(T2)<WTS(X)
   4<3 (FALSE)

=>轉到 else 並執行讀取操作 r2(X) 和 RTS(X)=4

更新於: 2021-07-06

14K+ 瀏覽量

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.