1. 程式人生 > 其它 >第十一章 併發控制:

第十一章 併發控制:

技術標籤:資料庫

第十一章 併發控制:

學習內容:

  1. 併發控制概述
  2. 封鎖
  3. 封鎖協議
  4. 活鎖與死鎖
  5. 併發排程的可序列性
  6. 兩段鎖協議
  7. 封鎖的粒度

撰稿時間:2020/12/06:

提示:加油!!!!

-------------1併發控制概述:

併發控制引入: 由於多個事務可以同時併發使用資料庫系統,因此會破壞事務隔離性和資料庫的一致性;
併發控制的三種類型:(此處學習可以利用畫圖進行時間切片判斷是那種型別)
1. 事務序列執行方式(單處理機):
每個時刻只有一個事務執行,其他事務的執行必須等待這個事務結束後才能執行;
未充分利用系統資源,發揮資料庫共享資源的特點;
2. 事務交叉併發方式(單處理機):
在單處理機系統中,事務的並行執行是這些並行事務的並行操作輪流交叉執行;

單處理機系統中的並行事務並沒有真正地並行執行,但能夠減少處理機的空閒時間,提高系統的效率;
3. 事務同時併發方式(多處理機):
多處理機系統中每個處理機可執行一個事務,多個處理機可以同時執行多個事務,實現多個事務真正的並行執行;
最理想的併發方式,但受制於硬體環境;
更復雜的併發方式機制;
**併發控制機制的任務:**併發操作的正確排程、保證事務的隔離性和一致性;
**併發操作帶來的資料不一致性:**丟失修改、不可重複讀、讀髒資料;
1. 丟失修改:

  • [ ]寫-寫,兩個事務T1和T2讀入同一資料並修改,T2的提交結果破壞了T1提交的結果,導致T1的修改被丟失。
    2. 不可重複讀:
  • 讀-更新,不可重複讀是指事務T1讀取資料後,事務T2 執行更新操作,使T1無法再現前一次讀取結果。
  • 事務T2的更新操作包括三種:修改、刪除和增加。其中刪除和增加又稱為幻影現象。
    3. 讀髒資料:
  • 事務T1修改某一資料,並將其寫回磁碟,事務T2讀取同一資料後,T1由於某種原因被撤銷,這時T1已修改過的資料恢復原值,T2讀到的資料就與資料庫中的資料不一致,T2讀到的資料就為“髒”資料,即不正確的資料

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

注意:
事務是併發控制的基本單位;
資料的不一致性:併發操作破壞了事務的隔離性;
併發控制就是要用正確的方式排程併發操作,使一個使用者事務的執行不受其他事務的干擾,從而避免造成資料的不一致性;
對資料庫的應用有時允許某些不一致性,可以降低對一致性的要求以減少系統開銷;

-------------2封鎖:

封鎖定義:
 封鎖就是事務T在對某個資料物件(例如表、記錄等)操作之前,先向系統發出請求,對其加鎖
 加鎖後事務T就對該資料物件有了一定的控制,在事務T釋放它的鎖之前,其它的事務不能更新此資料物件。
封鎖型別: 相容矩陣記住x和誰都不相容
 排它鎖(Exclusive Locks,簡記為X鎖)

若事務T對資料物件A加上X鎖,則只允許T讀取和修改A,其它任何事務都不能再對A加任何型別的鎖,直到T釋放A上的鎖
保證其他事務在T釋放A上的鎖之前不能再讀取和修改A
排它鎖又稱為寫鎖

 共享鎖(Share Locks,簡記為S鎖)

若事務T對資料物件A加上S鎖,則事務T可以讀A但不能修改A,其它事務只能再對A加S鎖,而不能加X鎖,直到T釋放A上的S鎖
保證其他事務可以讀A,但在T釋放A上的S鎖之前不能對A做任何修改
共享鎖又稱為讀鎖

-------------3封鎖協議:

封鎖協議定義:
 在運用X鎖和S鎖對資料物件加鎖時,需要約定一些規則,這些規則為封鎖協議(LockingProtocol)

  •  何時申請X鎖或S鎖  持鎖時間  何時釋放

 對封鎖方式規定不同的規則,就形成了各種不同的封鎖協議,在不同的程度上保證併發操作的正確排程。
三級封鎖協議:

1.一級封鎖協議
 事務T在修改資料R之前必須先對其加X鎖,直到事務結束才釋放。

  • 正常結束(COMMIT) 非正常結束(ROLLBACK)

一級封鎖協議只可防止丟失修改,並保證事務T是可恢復的。
2.二級封鎖協議
 一級封鎖協議加上事務T在讀取資料R之前必須先對其
加S鎖,讀完後即可釋放S鎖。
二級封鎖協議可以防止丟失修改和讀“髒”資料。
3.三級封鎖協議
 一級封鎖協議加上事務T在讀取資料R之前必須先對其
加S鎖,直到事務結束才釋放。
三級封鎖協議可防止丟失修改、讀髒資料和不可
重複讀。

-------------4活鎖與死鎖:

封鎖帶來的問題:

  1. 活鎖:
    如何解決??? 採用先來先服務的策略
     當多個事務請求封鎖同一資料物件時
     按請求封鎖的先後次序對這些事務排隊
     該資料物件上的鎖一旦釋放,首先批准申請佇列中第一個事務獲得鎖
  2. 死鎖:
    如何解決???
**死鎖的預防**
死鎖的原因:兩個或多個事務都已封鎖了一些資料物件,然後又都請求對已為其他事務封鎖的資料物件加鎖,從而出現死等待。
預防死鎖的發生就是要破壞產生死鎖的條件
預防死鎖的的方法:
(1)一次封鎖法:
定義:要求每個事務必須一次將所有要使用的資料全部加鎖,否則就不能繼續執行;
問題:
     過早加鎖,降低系統併發度
     難於事先精確確定封鎖物件
     資料庫中資料是不斷變化的,原來不要求封鎖的資料,在執行過程中可能會變成封鎖物件,所以很難事先精確地確定每個事務所要封鎖的資料物件。
(2)順序封鎖法
定義:順序封鎖法是預先對資料物件規定一個封鎖順序,所有事務都按這個順序實行封鎖。
問題:
       維護成本:資料庫系統中封鎖的資料物件極多,並且隨資料的插入、刪除等操作而不斷地變化,要維護這樣的資源的封鎖順序非常困難,成本很高。
       難以實現:事務的封鎖請求可以隨著事務的執行而動態地決定,很難事先確定每一個事務要封鎖哪些物件,因此也就很難按規定的順序去施加封鎖。
**死鎖的診斷與解除**

## **死鎖的診斷:**1)超時法
定義:如果一個事務的等待時間超過了規定的時限,就認為發生了死鎖
優點:實現簡單
缺點:
     有可能誤判死鎖
     時限若設定得太長,死鎖發生後不能及時發現
(2)等待圖法
定義:
用事務等待圖動態反映所有事務的等待情況
 - 事務等待圖是一個有向圖G=(T,U) 
 - T為結點的集合,每個結點表示正執行的事務 
 - U為邊的集合,每條邊表示事務等待的情況
 - 若T1等待T2,則T1,T2之間劃一條有向邊,從T1指向T2
併發控制子系統週期性地(比如每隔數秒)生成事務等待圖,檢測事務。如果發現圖中存在迴路,則表示系統中出現了死鎖。

## **死鎖的解除:**

選擇一個處理死鎖代價最小的事務,將其撤消
釋放此事務持有的所有的鎖,使其它事務能繼續執行下去

-------------5併發排程的可序列性:

可序列化(Serializable)排程:
 多個事務的併發執行是正確的,當且僅當其結果與按某一次序序列地執行這些事務時的結果相同
可序列性(Serializability):
 是併發事務正確排程的準則
 一個給定的併發排程,當且僅當它是可序列化的,才認為是正確排程
衝突可序列化排程:
一個排程Sc在保證衝突操作的次序不變的情況下,通過交換兩個事務不衝突操作的次序得到另一個排程Sc’,如果Sc’是序列的,稱排程Sc是衝突可序列化的排程
若一個排程是衝突可序列化,則一定是可序列化的排程
注意: 衝突可序列化排程是可序列化排程的充分條件,不是必要條件。還有不滿足衝突可序列化條件的可序列化排程。

-------------6兩段鎖協議: 實現併發排程的可序列性

兩段鎖協議定義 所有事務必須分兩個階段對資料項加鎖和解鎖
 在對任何資料進行讀、寫操作之前,事務首先要獲得對該資料的封鎖
 在釋放一個封鎖之後,事務不再申請和獲得任何其他封鎖
“兩段”鎖的含義
 第一階段是獲得封鎖,也稱為擴充套件階段
事務可以申請獲得任何資料項上的任何型別的鎖,但是不能釋放任何鎖
 第二階段是釋放封鎖,也稱為收縮階段
事務可以釋放任何資料項上的任何型別的鎖,但是不能再申請任何鎖
兩段鎖協議與防止死鎖的一次封鎖法
 一次封鎖法要求每個事務必須一次將所有要使用的資料全部加鎖,否則就不能繼續執行,因此一次封鎖法遵守兩段鎖協議
 但是兩段鎖協議並不要求事務必須一次將所有要使用的資料全部加鎖,因此遵守兩段鎖協議的事務可能發生死鎖
注意:


 - 事務遵守兩段鎖協議是可序列化排程的充分條件,而不是必要條件                                    
 - 若併發事務都遵守兩段鎖協議,則對這些事務的任何併發排程策略都是可序列化的                       
 - 若併發事務的一個排程是可序列化的,不一定所有事務都符合兩段鎖協議

-------------7封鎖的粒度:

 封鎖物件的大小稱為封鎖粒度(Granularity)

 **封鎖的物件:邏輯單元,物理單元**
  例:關係資料庫中的封鎖物件
 邏輯單元: 屬性值、屬性值的集合、元組、關係、索引
項、整個索引、整個資料庫等
 物理單元:頁(資料頁或索引頁)、物理記錄等
**封鎖粒度與系統的併發度和併發控制的開銷密切相關。**
 封鎖的粒度越大,資料庫所能夠封鎖的資料單元就越
少,併發度就越小,系統開銷也越小;
 封鎖的粒度越小,併發度較高,但系統開銷也就越大

多粒度封鎖:

  1. 多粒度樹:
     以樹形結構來表示多級封鎖粒度
     根結點是整個資料庫,表示最大的資料粒度
     葉結點表示最小的資料粒度
  2. 多粒度封鎖協議:
    允許多粒度樹中的每個結點被獨立地加鎖
    對一個結點加鎖意味著這個結點的所有後裔結點也被加以同樣型別的鎖
    在多粒度封鎖中一個數據物件可能以兩種方式封鎖:顯式封鎖和隱式封鎖

    顯式封鎖: 直接加到資料物件上的封鎖
    隱式封鎖:是該資料物件沒有獨立加鎖,是由於其上級結點加鎖而使該資料物件加上了鎖
    顯式封鎖和隱式封鎖的效果是一樣的
    系統檢查封鎖衝突時要檢查顯式封鎖,還要檢查隱式封鎖
     對某個資料物件加鎖,系統要檢查
 **該資料物件**
 有無顯式封鎖與之衝突
**所有上級結點**
 檢查本事務的顯式封鎖是否與該資料物件上的隱式封鎖
衝突(由上級結點已加的封鎖造成的)
**所有下級結點**
 看上面的顯式封鎖是否與本事務的隱式封鎖(將加到下
級結點的封鎖)衝突

意向鎖:

引進意向鎖(intention lock)目的:提高對某個資料物件
加鎖時系統的檢查效率
如果對一個結點加意向鎖,則說明該結點的下層結點正在被
加鎖
對任一結點加基本鎖,必須先對它的上層結點加意向鎖
意向共享鎖(Intent Share Lock,簡稱IS鎖)
如果對一個數據物件加IS鎖,表示它的後裔結點擬(意向)
加S鎖。
意向排它鎖(Intent Exclusive Lock,簡稱IX鎖)
如果對一個數據物件加IX鎖,表示它的後裔結點擬(意向)
加X鎖。
共享意向排它鎖(Share Intent Exclusive Lock,簡稱SIX鎖)
如果對一個數據物件加SIX鎖,表示對它加S鎖,再加IX鎖,
即SIX = S + IX。

鎖的強度

 鎖的強度是指它對其他鎖的排斥程度
 一個事務在申請封鎖時以強鎖代替弱鎖是安全的,反之則不然

具有意向鎖的多粒度封鎖方法
 申請封鎖時應該按自上而下的次序進行
 釋放封鎖時則應該按自下而上的次序進行
好處
 提高了系統的併發度
 減少了加鎖和解鎖的開銷
 在實際的資料庫管理系統產品中得到廣泛應用
相容矩陣
在這裡插入圖片描述