數據庫併發控制機制

wom知道事務的ACID特性被破壞的原因之一就是多個事務對數據庫的併發操作造成的。所以 數據庫管理系統需要對這些併發操作進行正確的調度,併發控制機制就是用正確的方式調度併發操作,使一個用戶事務不收其他事務的干擾。
併發控制的技術主要有封鎖,時間戳,樂觀控制發和多版本併發控制

1. 封鎖

基本的封鎖類型有:排他鎖(X鎖,寫鎖)和共享鎖(S鎖,讀鎖)
數據庫中的共享鎖和排他鎖:https://blog.csdn.net/qq_41386300/article/details/101937234

1.1 封鎖協議

封鎖協議:何時申請鎖,持鎖時間,何時釋放

  • 一級封鎖協議
    事務T在修改數據R之前必須先對其加X鎖,直到事務結束才釋放
    只能避免事務的丟失更新

  • 二級封鎖協議
    在一級的基礎上增加:事務T在讀取數據R之前必須加S鎖,,讀完後釋放
    進一步避免了髒讀

  • 三級封鎖協議
    一級的基礎是上增加:事務T在讀取數據R之前必須加S鎖,,事務結束後釋放
    進一步避免了不可重複讀

1.2 活鎖和死鎖

活鎖

如果事務T1封鎖裏數據R,事務T2也請求封鎖R,T2等待,事務T3也請求封鎖R,當T1釋放裏R的鎖後,系統首先批准了T3的請求,T2繼續等待,然後T4又請求封鎖R,T3釋放鎖後系統又批准裏T4的請求…T2有可能永遠等待,這就是活鎖的情形

避免活鎖的簡單方法是採用先來先服務策略

死鎖

死鎖就是循環等待的情形

數據庫中解決死鎖問題主要有兩類辦法:一是採取一定措施預防死鎖的發生;二是定期診斷是否有死鎖,有則解除它

  1. 死鎖預防
    • 一次封鎖法
      每個事務都一次性將所有要使用的數據全部加鎖
    • 順序封鎖法
      預先對數據對象規定一個封鎖順序,所有事務都按這個順序實施封鎖

數據庫中普遍採用診斷並解除的方法

  1. 死鎖診斷與解除
    • 死鎖診斷
      • 超時法
        如果一個事務等待時間超過了規定的時間,就認爲發生裏死鎖
        缺點:一是有可能誤判;二是若時間設置太長,死鎖發生後不能及時發現
      • 等待圖法
        事務等待圖是一個有向圖G=(T,U),T爲結點集合,u爲邊集合,若事務T1等待T2,則畫一條由T1指向T2的邊
        併發控制子系統週期性的生成事務等待圖,並進行檢測,如果發現圖中存在迴路,則表示系統中出現裏死鎖
    • 死鎖解除
      通常採用的方法是選擇一個處理死鎖代價最小的事務,將其撤銷,釋放此事務持有的所有鎖,當然,對撤銷的事務所做的數據修改操作必須恢復

2. 時間戳

給每一個事務蓋上一個時標,即事務開始執行的時間,每個事務具有唯一的時間戳,如果發生衝突操作,就回滾具有較早時間戳的事務,以保證其他事務的正常執行,被回滾的事務被賦予一個新的時間戳並從頭開始執行

3. 樂觀控制法

樂觀控制法認爲很少發生衝突,一次不對事務進行特殊的管制,而是讓他自由執行,事務提交前再進行正確性檢查,如果檢查後發現該事務出現過沖突,則拒絕執行並回滾

4. 多版本併發控制

版本是指數據對象的一個快照,記錄數據對象某個時刻的爲狀態。

有一個數據對象A有兩個事務,T1是寫事務,T2是讀事務,先啓動T1後啓動T2,T1在寫A時,爲A生成一個新的版本A‘,那麼T2就可以繼續在T1上執行,,T2提交的時候要先檢查T1是否完成,如果T1已完成則T2可以提交,否則T2等待直到T1完成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章