數據庫併發控制
封鎖
- 排他鎖(寫鎖,X鎖):事務T對數據對象A加上X鎖,則只允許T讀取和修改A,任何其他事務不能再對A加任何鎖,直到T釋放A上的鎖。
- 共享鎖(讀鎖,S鎖):事務T對數據對象A加上S鎖,則T可以讀A但不能修改A,其他事務直能再對A加S鎖,不能加X鎖,直到T釋放A上的S鎖。
封鎖協議
- 一級封鎖協議:事務T在修改數據R之前必須先加X鎖,直到事務結束才釋放。可防止丟失修改。
- 二級封鎖協議:在一級基礎上增加事務T在讀取數據之前必須加S鎖,讀完後即可釋放。可防止讀髒數據。
- 三級封鎖協議:在一級基礎上增加事務T在讀數據之前必須加S鎖,直到事務結束才釋放。可防止不可重複讀。
活鎖和死鎖
- 活鎖:事務可能永遠等待的情況是活鎖。避免活鎖的簡單方法是採用先來先服務策略、
- 死鎖:如果事務T1封鎖數據R1,T2封鎖了數據R2,然後T1請求封鎖R2,因T2已經封鎖R2於是T1只能等待;接着T2請求封鎖R1,於是T2也直能等待;這就出現了T1等待T2,T2也等待T1的局面,兩個事務永遠不能結束,形成死鎖。
- 死鎖的預防:
(1)一次封鎖法:每個事務必須一次將所有要使用 數據全部加鎖。
(2)順序封鎖法:對數據規定一個封鎖順序,所有事務都按照這個順序實施封鎖。 - 死鎖的診斷和解除
(1)超時法
(2)等待圖法
- 死鎖的預防: