當多個事務在數據庫中併發地執行時,數據的一致性可能沒法再維持。系統有必要控制各事務之間的相互做用,這是經過被稱爲併發控制的機制來實現的。最經常使用的機制是各類封鎖協議、時間戳排序機制、有效性檢查技術與多版本機制。
1、封鎖協議是一組規則,這些規則闡明瞭事務什麼時候對數據庫中的數據項進行加鎖和解鎖。
兩階段封鎖協議僅在一個事務不曾釋聽任何數據項上的鎖時才容許該事務封鎖新的數據項。該協議保證可串行性,但不能避免死鎖。在沒有關於數據項訪問方式信息的狀況下,兩階段封鎖協議對於保證可串行性即便必要的又是充分的。
嚴格兩階段封鎖協議要求事務持有的全部排他鎖必須在事務結束時方可釋放,其目的是保證結果調度的可恢復性和無級聯性;強兩階段封鎖協議要求事務持有的全部鎖必須在事務結束時方可釋放。
基於圖的封鎖協議對訪問數據項的順序加以限制,從而不須要使用兩階段封鎖還能保證可串行性,並且又可以保證不會產生死鎖。
許多種封鎖協議都不能防止死鎖。一種能夠防止死鎖的方法是使用數據項的一種順序,而且按與該順序一致的次序申請加鎖;另外一種防止死鎖的方法是使用搶佔與事務回滾。爲控制搶佔,咱們爲每一個事務賦予一個惟一時間戳。這些時間戳用於決定事務是等待仍是回滾。若是一個事務回滾,它在重啓時保持原有時間戳。
若是沒有預防死鎖的機制,系統必須用死鎖檢測與恢復機制來處理它們。爲此,系統構造了一個等待圖,當且僅當等待圖包含環時,系統會處於死鎖狀態。當一個檢測算法斷定死鎖存在時,系統經過回滾一個或多個事務來解除死鎖。
某些狀況下把多個數據項聚爲一組,將它們做爲彙集數據項來處理,其效果可能更好,這就涉及到粒度級別的問題。系統容許各類大小的數據項,並定義數據項的層次,其中小數據項、嵌套於大數據項之中。這種層次結構能夠圖形化地表示爲樹。封鎖按從根結點到葉節點的順序進行;解鎖則按從葉節點到根節點的順序進行。但這種協議雖然能夠保證可串行性,但不能避免死鎖。
2、時間戳排序機制經過事先在每對事務之間選擇一個順序來保證可串行性。系統中的每一個事務對應一個惟一的時間戳,這個時間戳決定了事務的可串行化順序。若是事務Ti的時間戳小於事務Tj的時間戳,則該機制保證產生的調度等價於事務Ti出如今事務Tj以前的串行調度。該機制經過回滾違反該次序的食物來保證這一點。
3、多版本併發控制機制基於在每一個事務寫數據項時爲該數據項建立一個新版本。讀操做發出時,系統選擇其中的一個版本進行讀取。利用時間戳,併發控制機制保證按確保可串行性的方式選擇要讀取的版本。
4、
學習資料:Database System Concepts, by Abraham Silberschatz, Henry F.Korth, S.Sudarshan
算法