數據庫原理第十一章---併發控制

1.併發控制的概述

事務是併發控制的基本單位,保證事務的ACID特性是事務處理的重要任務,而事務的ACID破壞的可能原因之一是多個數據對事務的併發控制造成的。所以爲了保證事務的一致性和隔離性,數據庫系統需要對併發操作進行正確的調度。

併發控制帶來的數據不一致性包括數據丟失、不可重複度和“髒讀”。

數據丟失

兩個事務T1、T2讀同一數據並修改,T2提交的結果破壞了T1提交的結果,導致數據的丟失。例如在甲乙兩個售票點中,事務T1和T2所讀到的票餘額都爲16,T1購票後把餘票15寫回數據庫,T2購票後也吧餘票15寫回數據庫,這就造成了T1數據的丟失。

不可重複讀

不可重複讀是指事務T1讀取數據後,事務T2執行更新操作,使T1無法再讀前一次讀取的結果。三種情況如下:

  • 事務T1讀取數據後,T2對其進行了修改
  • 事務T1讀取數據後,T2刪除了部分數據
  • 事務T1按某條件讀取數據後,T2插入了一些數據,插入數據滿足T1讀取條件

可重複讀是指在一次事務內,對同一條記錄的讀取,得到的結果都是一樣的。

讀“髒”數據

讀“髒”數據是指事務T1修改某一數據並將其寫回磁盤,事務T2讀取同一數據後,T1由於某種原因被撤銷,這是T1修改的數據恢復原值,T2讀到的數據與數據庫中的數據不一致,這時候T2讀到的數據就是“髒數據”,即與數據庫不一致的數據。

併發控制的主要技術有封鎖、時間戳、樂觀控制法和多版本併發控制

2.封鎖

封鎖是實現併發控制的一個非常重要的技術。所謂封鎖就是事務T在對某個數據對象操作之前向系統發出請求對其加鎖,加鎖後,在T事務釋放鎖前,其他事務不能更新此數據對象。

基本封鎖類型有排它鎖(Exclusive Locks,簡記爲X鎖)和共享鎖(Share Locks,簡記爲S鎖)

  • 排他鎖又稱爲寫鎖。
    若事務T對數據數據對象A加上X鎖,則只允許T讀取和修改A,其他任何事務都不能對A加鎖,直到T釋放A的鎖爲止。這就保證了其他事務在A釋放前不能再讀取和修改A。
  • 共享鎖又稱讀鎖。
    若事務T對數據對象A加上S鎖,則事務T可以讀A但不能修改A,其他事務只能在對A加S鎖,而不能加X鎖,直到T釋放A上的S鎖。這就保證了事務執行時讀到的A數據是正確的。

3.封鎖協議

在運用X鎖和S鎖這兩種鎖對數據對象進行加鎖時,還需要約定一些規則。例如,何時申請X鎖或S鎖、持續時間、何時釋放等。這些規則稱爲封鎖協議。

一級封鎖協議

一級封鎖協議是指,事務T在修改數據R之前必須對其加X所,直到事務結束才釋放。事務的結束包括正常結束(commit)和非正常結束(rollback)。

一級封鎖協議可以防止丟失數據,並保證事務T是可恢復的。如果僅僅讀而不對其修改是不需要加鎖的,所以它不能保證可重複讀和不讀“髒”數據。

二級封鎖協議

二級封鎖協議是指,在一級封鎖協議基礎上增加事務T在讀取R之前必須先對其加S鎖,讀完後即可釋放S鎖。

二級封鎖協議除了防止數據丟失修改,還可進一步防止讀“髒”數據。由於讀完數據化即可釋放S鎖,所以它不能保證可重複讀。

三級封鎖協議

三級封鎖協議是指,在一級封鎖協議的基礎上增加事務T在讀取數據R之前必須先對其加S鎖,直到事務結束才釋放。

三級封鎖協議除了可以防止丟失修改和讀“髒”數據外,還進一步防止了不可重複讀。


以上三種協議主要區別在於什麼操作需要申請封鎖,以及何時釋放鎖(即持鎖時間)。總結表如下圖,表中指出了不同封鎖協議使事務達到一致性級別是不同的,封鎖協議級別越高,一致性程度越高。

在這裏插入圖片描述

4.死鎖和活鎖

和操作系統一樣,封鎖的方法可能引起活鎖和死鎖等問題。

活鎖

如果事務T1封鎖了R,事務T2也請求封鎖R,事務T3也申請封鎖R,於是T2、T3等待,當T1釋放R之後首先批准了T3,T2仍在等待,這時T4又請求封鎖R,當T2釋放之後又批准了T4的請求…T2有可能永遠等待,這就是活鎖的例子。

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

死鎖

如果事務T1封鎖了R1,事務T2封鎖了R2,然後T2申請封鎖T1,這時候T2就在等待,接着T1又申請封鎖R2,這時T2也需要等待,這就造成了T1等T2,而T2又等T1的局面,T1和T2永遠不可能結束,形成死鎖。

目前解決死鎖問題主要有兩種方法:一類是採取一定措施來預防死鎖的發生,另一類是允許發生死鎖,採用一定手段定期診斷系統中有無死鎖,若有則解除。

死鎖的預防

要預防首先要找出產生死鎖的原因:當兩個或多個事務都已封鎖了一些事務對象,然後有再對已經封鎖的數據對象請求封鎖,這就造成了死鎖。因此防止死鎖其實就是要破壞死鎖產生的條件。主要有以下兩種方法

  • 一次封鎖法
    一次封鎖法要求每個事物必須一次性將所有要使用的數據全部加鎖,否則不能繼續執行。存在的問題:擴大了封鎖範圍,降低了系統的併發度,且難確定封鎖範圍。
  • 順序封鎖法
    順序封鎖法是預先對數據對象規定一個封鎖順序,所有事物按照這個順序封鎖。存在的問題:涉及的對象多,維護起來麻煩,難以確定封鎖對象。

對於以上兩個方法都不太適合數據庫的特點,因此解決死鎖問題普遍採用診斷並解除的方法。
死鎖的診斷與解除

數據庫系統中診斷死鎖的方法與操作系統類似,一般使用超時法或事物等待圖法。

  • 超時法
    超時法即給一個事務設置等待時間限制,如果超過了這個限制,就認爲發生了死鎖。超時法實現簡單,但不足也很明顯,就是很容易誤判。
  • 等待圖法

數據庫管理系統的併發控制子系統一旦檢測到系統中存在死鎖,通常解除的方法爲:選擇一個死鎖代價最小的事務,將其撤銷,釋放其事務持有的所有鎖,使其他事務得以持續運行下去。

5.併發調度的可串行性

數據庫系統對事物併發事物不同的調度可能會產生不同的結果,那麼什麼樣的調度室正確的呢?顯然,串行調度是正確的。執行結果等價於串行調度也是正確的。這樣的調度叫做可串行調度。

串行即按照一定的順序

可串行調度

多個事物的併發執行是正確的,當且僅當其結果與按某一次序串行地執行這些事物時的結果相同,這種調度策略爲可串行調度

可串行性事物是併發事物正確調度的準則。按這個準則規定,一個給定的併發調度,當且僅當它是可串行的,才認爲是正確的。

衝突可串行調度

衝突是指:不同事物對同一個數據的讀寫操作和寫寫操作。

一個調度Sc在保證衝突操作的次序不變的情況下,通過交換兩個事物不衝突操作的次序得到另一個調度Sc’,如果Sc’是串行的,稱調度Sc爲衝突可串行化的調度。若一個調度是衝突可串行化,則一定是可串行化的調度。因此可以用這種方法來判斷一個調度是否是衝突可串行化的。

衝突可串行化調度是可串行化調度的充分條件,不是必要條件。

6.兩段鎖協議

爲了保證併發調度的正確性,數據庫管理系統的併發控制機制必須提供一定的手段來保證調度室可串行化的。目前數據庫管理系統普遍採用兩段鎖(Two Locking,簡稱2PL)協議的方法實現併發調度的可串行性,從而保證調度的正確性。

所謂兩段鎖協議是指所有事物必須分兩個階段對數據項加鎖和解鎖:

  • 對任何數據進行讀、寫操作之前,首先申請並獲得對該數據的封鎖。
  • 在釋放一個鎖之後,事物不再申請獲得其他封鎖。

所謂兩段鎖的含義是事物分爲兩個階段:

  • 第一階段是獲得鎖,也稱爲擴展階段,在這個階段事物可以申請獲得任何數據項上任何類型的鎖,但不能釋放任何鎖。
  • 第二階段是釋放鎖,也稱爲收縮階段,在這個階段事物可以釋放任何數據項上任何類型的鎖,但不能申請任何鎖。

事物遵守兩段鎖協議是可串行化調度的充分條件,二不是必要條件。

7.封鎖的粒度

封鎖對象的大小稱爲封鎖粒度。

封鎖的對象可以是邏輯單元也可以是物理單元。以關係數據庫爲例,封鎖對象可以是這樣一些邏輯單元:屬性值、屬性值得集合、元組、關係索引項等,也可以是這樣一些物理單元:頁、物理記錄。

封鎖粒度與系統的併發度和併發控制的開銷密切相關。直觀地看,封鎖的粒度越大,數據庫所能夠封鎖的數據單元就越少,併發度越小,系統開銷也越小;反之,封鎖粒度越小,併發度越高,系統開銷也就越大。

多粒度封鎖

多粒度封鎖是指一個數據庫系統同時支持多種封鎖粒度供不同的事物選擇。

考慮多粒度封鎖時,首先定義如下多粒度樹。多粒度樹的根結點是整個數據庫,表示最大數據粒度。葉結點表示最小數據粒度。
在這裏插入圖片描述
多粒度封鎖的封鎖協議:多粒度封鎖協議允許多粒度樹中的每個結點被獨立地加鎖。對一個結點加鎖意味着這個結點的所有後裔結點也被加以同樣類型的鎖。因此多粒度封鎖中一個數據對象可能有兩種方式封鎖,顯示封鎖和隱式封鎖。

顯示封鎖是應事物的要求直接加到數據對象上的鎖,隱式封鎖時該數據對象沒有被獨立加鎖,是由於其上級結點加鎖而使該數據對象加上了鎖。

多粒度封鎖方法中,顯示封鎖和隱式封鎖效果是一樣的,因此係統檢查封鎖衝突時不僅要檢查顯示封鎖還要檢查隱式封鎖。對某個數據對象加鎖時,系統要檢查其上下級結點的是否有衝突,這樣檢查效率很低,因此引入了意向鎖

意向鎖

意向鎖的含義是如果對一個結點加意向鎖,則說明該結點的下層結點正在被加鎖,對任一結點加鎖時,必須先對它的上層結點加意向鎖。

常見的意向鎖有以下三種:
在這裏插入圖片描述

IS鎖

如果一個數據對象加IS鎖,表示它的後裔結點擬(意向)加S鎖

IX鎖

如果對一個對象加IX鎖,表示它的後裔擬(意向)加X鎖

SIX鎖

如果對一個對象加SIX鎖,表示對它加S鎖再加IX鎖,即SIX=S+IX(讀整個表,個別寫)。

8.其他併發控制

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