當多個事務在資料庫中并發地執行時,資料的一緻性可能無法再維持。系統有必要控制各事務之間的互相作用,這是通過被稱為并發控制的機制來實作的。最常用的機制是各種封鎖協定、時間戳排序機制、有效性檢查技術與多版本機制。
一、封鎖協定是一組規則,這些規則闡明了事務何時對資料庫中的資料項進行加鎖和解鎖。
兩階段封鎖協定僅在一個事務未曾釋放任何資料項上的鎖時才允許該事務封鎖新的資料項。該協定保證可串行性,但不能避免死鎖。在沒有關于資料項通路方式資訊的情況下,兩階段封鎖協定對于保證可串行性即使必要的又是充分的。
嚴格兩階段封鎖協定要求事務持有的所有排他鎖必須在事務結束時方可釋放,其目的是保證結果排程的可恢複性和無級聯性;強兩階段封鎖協定要求事務持有的所有鎖必須在事務結束時方可釋放。
基于圖的封鎖協定對通路資料項的順序加以限制,進而不需要使用兩階段封鎖還能保證可串行性,而且又能夠保證不會産生死鎖。
許多種封鎖協定都不能防止死鎖。一種可以防止死鎖的方法是使用資料項的一種順序,并且按與該順序一緻的次序申請加鎖;另一種防止死鎖的方法是使用搶占與事務復原。為控制搶占,我們為每個事務賦予一個唯一時間戳。這些時間戳用于決定事務是等待還是復原。如果一個事務復原,它在重新開機時保持原有時間戳。
如果沒有預防死鎖的機制,系統必須用死鎖檢測與恢複機制來處理它們。為此,系統構造了一個等待圖,當且僅當等待圖包含環時,系統會處于死鎖狀态。當一個檢測算法判定死鎖存在時,系統通過復原一個或多個事務來解除死鎖。
某些情況下把多個資料項聚為一組,将它們作為聚集資料項來處理,其效果可能更好,這就涉及到粒度級别的問題。系統允許各種大小的資料項,并定義資料項的層次,其中小資料項、嵌套于大資料項之中。這種層次結構可以圖形化地表示為樹。封鎖按從根結點到葉節點的順序進行;解鎖則按從葉節點到根節點的順序進行。但這種協定雖然可以保證可串行性,但不能避免死鎖。
二、時間戳排序機制通過事先在每對事務之間選擇一個順序來保證可串行性。系統中的每個事務對應一個唯一的時間戳,這個時間戳決定了事務的可串行化順序。如果事務Ti的時間戳小于事務Tj的時間戳,則該機制保證産生的排程等價于事務Ti出現在事務Tj之前的串行排程。該機制通過復原違反該次序的食物來保證這一點。
三、多版本并發控制機制基于在每個事務寫資料項時為該資料項建立一個新版本。讀操作發出時,系統選擇其中的一個版本進行讀取。利用時間戳,并發控制機制保證按確定可串行性的方式選擇要讀取的版本。
四、
學習資料:Database System Concepts, by Abraham Silberschatz, Henry F.Korth, S.Sudarshan