DBMS基於鎖的協定


在這種型別的協定中,任何事務在獲取適當的鎖之前都無法讀取或寫入資料。 鎖有兩種型別:

1.共用鎖:

  • 它也稱為唯讀鎖。 在共用鎖中,資料項只能由事務讀取。
  • 它可以在事務之間共用,因為當事務持有鎖時,它無法更新資料項上的資料。

2.獨占鎖:

  • 在獨占鎖中,資料項既可以是讀取,也可以是事務寫入。
  • 這種鎖是獨占的,在此鎖中,多個事務不會同時修改相同的資料。

有四種型別的鎖定協定可用:

1. 簡單的鎖定協定

這是在事務時鎖定資料的最簡單方法。簡單的基於鎖的協定允許所有事務在插入或刪除或更新資料之前鎖定資料。 它將在完成交易後解鎖資料項。

2.預先宣告鎖定協定

  • 預先宣告鎖定協定評估事務以列出它們需要鎖定的所有資料項。
  • 在開始執行事務之前,它會請求DBMS對所有這些資料項進行所有鎖定。
  • 如果授予所有鎖定,則此協定允許事務開始。 當事務完成後,它會釋放所有鎖。
  • 如果未授予所有鎖定,則此協定允許事務回滾並等待,直到授予所有鎖定。

3.兩階段鎖定(2PL)

  • 兩階段鎖定協定將事務的執行階段分為三個部分。
  • 在第一部分中,當事務的執行開始時,它尋求對它所需的鎖的許可。
  • 在第二部分中,事務獲取所有鎖。 一旦事務發布第一個鎖,第三個階段就會啟動。
  • 在第三階段,事務不能要求任何新鎖。它只釋放獲得的鎖。

2PL有兩個階段:

增長階段: 在增長階段,事務可以獲取資料項的新鎖,但是不能釋放任何鎖。
縮小階段: 在縮小階段,可以釋放事務所持有的現有鎖,但不能獲取新鎖。

在下面的範例中,如果允許鎖定轉換,則可能發生以下階段:

  • 在生長階段允許升級鎖(從S(a)到X(a))。
  • 鎖定降級(從X(a)到S(a))必須在縮小階段完成。

範例

以下方式顯示了解鎖和鎖定如何使用2-PL。

事務T1:

  • 成長階段:從步驟1-3開始
  • 收縮階段:從步驟5-7開始
  • 鎖定點:第3點

事務T2:

  • 成長階段:從步驟2-6開始
  • 收縮階段:從步驟8-9開始
  • 鎖定點:第6點

4. 嚴格階段鎖定(Strict-2PL)

  • Strict-2PL的第一階段類似於2PL。 在第一階段,在獲取所有鎖之後,事務繼續正常執行。
  • 2PL和嚴格2PL之間的唯一區別是Strict-2PL在使用後不釋放鎖。
  • Strict-2PL等待整個事務提交,然後一次釋放所有鎖。
  • Strict-2PL協定沒有鎖定釋放的縮小階段。

它沒有像2PL那樣的級聯中止。