1. 程式人生 > >《數據庫系統概念》19-並發控制

《數據庫系統概念》19-並發控制

多版本並發 新的 級聯 處理 控制 執行 常用 保持 concept

當多個事務在數據庫中並發地執行時,數據的一致性可能無法再維持。系統有必要控制各事務之間的相互作用,這是通過被稱為並發控制的機制來實現的。最常用的機制是各種封鎖協議、時間戳排序機制、有效性檢查技術與多版本機制。
一、封鎖協議是一組規則,這些規則闡明了事務何時對數據庫中的數據項進行加鎖和解鎖。
兩階段封鎖協議僅在一個事務未曾釋放任何數據項上的鎖時才允許該事務封鎖新的數據項。該協議保證可串行性,但不能避免死鎖。在沒有關於數據項訪問方式信息的情況下,兩階段封鎖協議對於保證可串行性即使必要的又是充分的。
嚴格兩階段封鎖協議要求事務持有的所有排他鎖必須在事務結束時方可釋放,其目的是保證結果調度的可恢復性和無級聯性;強兩階段封鎖協議要求事務持有的所有鎖必須在事務結束時方可釋放。
基於圖的封鎖協議對訪問數據項的順序加以限制,從而不需要使用兩階段封鎖還能保證可串行性,而且又能夠保證不會產生死鎖。
許多種封鎖協議都不能防止死鎖。一種可以防止死鎖的方法是使用數據項的一種順序,並且按與該順序一致的次序申請加鎖;另一種防止死鎖的方法是使用搶占與事務回滾。為控制搶占,我們為每個事務賦予一個唯一時間戳。這些時間戳用於決定事務是等待還是回滾。如果一個事務回滾,它在重啟時保持原有時間戳。
如果沒有預防死鎖的機制,系統必須用死鎖檢測與恢復機制來處理它們。為此,系統構造了一個等待圖,當且僅當等待圖包含環時,系統會處於死鎖狀態。當一個檢測算法判定死鎖存在時,系統通過回滾一個或多個事務來解除死鎖。
某些情況下把多個數據項聚為一組,將它們作為聚集數據項來處理,其效果可能更好,這就涉及到粒度級別的問題。系統允許各種大小的數據項,並定義數據項的層次,其中小數據項、嵌套於大數據項之中。這種層次結構可以圖形化地表示為樹。封鎖按從根結點到葉節點的順序進行;解鎖則按從葉節點到根節點的順序進行。但這種協議雖然可以保證可串行性,但不能避免死鎖。

二、時間戳排序機制通過事先在每對事務之間選擇一個順序來保證可串行性。系統中的每個事務對應一個唯一的時間戳,這個時間戳決定了事務的可串行化順序。如果事務Ti的時間戳小於事務Tj的時間戳,則該機制保證產生的調度等價於事務Ti出現在事務Tj之前的串行調度。該機制通過回滾違反該次序的食物來保證這一點。

三、多版本並發控制機制基於在每個事務寫數據項時為該數據項創建一個新版本。讀操作發出時,系統選擇其中的一個版本進行讀取。利用時間戳,並發控制機制保證按確保可串行性的方式選擇要讀取的版本。
四、

學習資料:Database System Concepts, by Abraham Silberschatz, Henry F.Korth, S.Sudarshan


《數據庫系統概念》19-並發控制