在並行控制中,可以同時執行多個事務。
它可能會影響事務結果。保持這些事務的執行順序非常重要。
並行控制的問題
並行事務以不受控制的方式執行時可能會出現幾個問題。 以下是並行控制中的三個問題。
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
看到了資料庫的不一致狀態。
並行控制協定
並行控制協定可確保並行事務的原子性,隔離性和可序列性。 並行控制協定可以分為三類: