在併發控制中,可以同時執行多個事務。
它可能會影響事務結果。保持這些事務的執行順序非常重要。
併發控制的問題
併發事務以不受控制的方式執行時可能會出現幾個問題。 以下是併發控制中的三個問題。
- 更新丟失
- 髒讀
- 不可重複讀取
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
看到了資料庫的不一致狀態。
併發控制協議
併發控制協議可確保併發事務的原子性,隔離性和可串行性。 併發控制協議可以分為三類:
- 基於鎖定的協議
- 時間戳協議
- 基於驗證的協議
上一篇:
DBMS死鎖
下一篇:
DBMS基於鎖的協議