DBMS並行控制


在並行控制中,可以同時執行多個事務。
它可能會影響事務結果。保持這些事務的執行順序非常重要。

並行控制的問題

並行事務以不受控制的方式執行時可能會出現幾個問題。 以下是並行控制中的三個問題。

  • 更新丟失
  • 髒讀
  • 不可重複讀取

1. 更新丟失

  • 當存取相同資料庫項的兩個事務包含其操作時,某些資料庫項的值不正確,則會發生丟失的更新問題。
  • 如果兩個事務T1和T2讀取記錄然後更新它,那麼第二個更新將覆蓋更新第一個記錄的效果。

範例

其中,

  • 在時間t2,事務-X讀取A的值。
  • 在時間t3,Transaction-Y讀取A的值。
  • 在時間t4,Transactions-X基於在時間t2看到的值寫入A的值。
  • 在時間t5,Transactions-Y基於在時間t3看到的值寫入A的值。
  • 因此,在時間T5,Transaction-X的更新丟失,因為事務y覆蓋它而不檢視其當前值。
  • 這種型別的問題稱為丟失更新問題,因為此處丟失了一個事務所做的更新。

2. 髒讀

  • 在一個事務更新資料庫的專案,然後由於某種原因事務失敗的情況下發生臟讀。 更新的資料庫項在被更改回原始值之前由另一個事務存取。
  • 事務T1更新由T2讀取的記錄。 如果T1中止,則T2現在具有從未形成穩定資料庫的一部分的值。

範例:

其中

  • 在時間t2,事務-Y寫入A的值。
  • 在時間t3,Transaction-X讀取A的值。
  • 在時間t4,Transactions-Y回滾。 因此,它將A的值更改回t1之前的值。
  • 因此,Transaction-X現在包含一個永遠不會成為穩定資料庫一部分的值。
  • 這種型別的問題稱為髒讀問題,因為一個事務讀取尚未提交的髒值。

3. 不可重複讀取問題

  • 不一致的檢索問題也稱為不可重複讀取。 當事務在一組資料上計算某些彙總函式而其他事務正在更新資料時,則會發生不一致的檢索問題。
  • 事務T1讀取記錄,然後進行一些其他處理,在此期間事務T2更新記錄。 現在,當事務T1讀取記錄時,新值將與先前的值不一致。

範例:

假設有兩個事務在三個賬戶上運作。

  • Transaction-X正在進行所有餘額的總和,而Transaction-Y正在將賬戶1中的金額50轉移到賬戶-3。
    這裡,transaction-X產生550的結果是不正確的。 如果在資料庫中寫入此生成的結果,則資料庫將變為不一致狀態,因為實際總和為600
    在這裡,transaction-X看到了資料庫的不一致狀態。

並行控制協定

並行控制協定可確保並行事務的原子性,隔離性和可序列性。 並行控制協定可以分為三類:

  • 基於鎖定的協定
  • 時間戳協定
  • 基於驗證的協定