解釋兩階段鎖定 (2PL) 協議 (DBMS)


資料庫的鎖定和解鎖應該以一種不會出現不一致性、死鎖和飢餓的方式進行。

2PL 鎖定協議

每個事務將以兩個不同的階段鎖定和解鎖資料項。

  • 增長階段 - 所有鎖都在此階段發出。在對資料項的所有更改提交後,不會釋放任何鎖,然後第二階段(收縮階段)開始。

  • 收縮階段 - 此階段不會發出任何鎖,所有對資料項的更改都會被記錄(儲存),然後釋放鎖。

2PL 鎖定協議的示意圖如下所示:

在增長階段,事務到達一個點,此時它可能需要的所有鎖都已獲取。這個點稱為鎖定點。

鎖定點到達後,事務進入收縮階段。

型別

兩階段鎖定有兩種型別:

嚴格的兩階段鎖定協議

事務可以在鎖定點之後釋放共享鎖,但它不能在事務提交之前釋放任何排他鎖。此協議建立了一個級聯較少的排程。

級聯排程:在此排程中,一個事務依賴於另一個事務。因此,如果一個事務需要回滾,則另一個事務也必須回滾。

嚴格的兩階段鎖定協議

事務不能在提交之前釋放任何鎖,無論是共享鎖還是排他鎖。

2PL 協議保證可序列化,但不能保證不會發生死鎖。

示例

假設 T1 和 T2 是兩個事務。

T1=A+B 和 T2=B+A

T1T2
Lock-X(A)Lock-X(B)
讀取 A;讀取 B;
Lock-X(B)Lock-X(A)

這裡,

Lock-X(B):由於 B 被 T2 鎖定,因此無法執行 Lock-X(B)。

Lock-X(A):由於 A 被 T1 鎖定,因此無法執行 Lock-X(A)。

在上述情況下,T1 等待 B,T2 等待 A。等待時間永無止境。至少在其中一個事務自願釋放鎖之前,這兩個事務都無法繼續執行。這種情況稱為死鎖。

等待圖如下所示:

等待圖:它用於死鎖檢測方法,為每個事務建立一個節點,如果 Ti 正在等待鎖定由 Tj 鎖定的專案,則建立一條從 Ti 到 Tj 的邊。WFG 中的迴圈表示發生了死鎖。WFG 定期建立。

更新於: 2023-11-07

51K+ 瀏覽量

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告