1. 程式人生 > >《數據庫系統概論》 -- 11.並發機制

《數據庫系統概論》 -- 11.並發機制

控制 對數 調度策略 臟數據 隔離 得到 style 直接 .com

1.背景

事務在執行過程中需要不同的資源,有時需要CPU,有時需要I/O,有時需要通信。如果事務串行執行,則許多系統資源將處於空閑狀態。

在單處理機系統中,事務的並行執行實際上是這些並行事務的並行操作操作輪流交叉運行,稱交叉並發方式。

在多處理機系統中,每個處理機可以運行一個事務,多個處理機可以同時運行多個事務,稱同時並發方式。

2.並發類型

並發事務會造成數據不一致,主要包括丟失修改、不可重復讀、讀“臟”數據

並發控制可實現事務的隔離性與一致性

2.1丟失修改

T1,T2同時讀入同一數據進行相同的修改,則可能會丟失某一事務的修改

2.2不可重復讀

T2先讀,T1修改,T2再讀,單個記錄兩次數據不一致;

T2先讀,T1刪除,T2再讀,記錄數減少或不存在;

T2先讀,T1新增,T2再讀,記錄數增多;

2.3讀臟數據

T1先修改,T2讀取,T1某種原因被撤銷,T2讀的數據為臟數據

3.並發處理

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

3.1封鎖

原理

事務T在對某個數據對象(如表、記錄)操作之前,先向系統發出請求,對其加鎖,加鎖後事務T在釋放他的鎖之前,其他事務不能更新此數據對象。

封鎖類型

排它鎖(X鎖):事務T對數據對象D加X鎖,其他事務不可讀寫該數據對象D

共享鎖(S鎖):事務T對數據對象D加S鎖,其他事務可以讀取D,但不可寫D

封鎖協議

一級封鎖協議

T在修改D之前加X鎖,結束後釋放

可以解決丟失修改

二級封鎖協議

T在修改D之前加X鎖,結束後釋放;T在讀取D之前加S鎖,讀取完釋放

可以解決丟失修改+讀“臟”數據

三級封鎖協議

T在修改D之前加X鎖,結束後釋放;T在讀取D之前加S鎖,T結束後釋放

可以解決丟失修改+讀“臟”數據+不可重復讀

活鎖與死鎖

活鎖

多個事務排隊執行,無優先級策略導致事務T之後的事務一直先於T執行,T一直等待,稱為活鎖

解決:采用“先來先服務”的策略

死鎖

T1封鎖了R1,T2封鎖了R2,T1又請求封鎖R2,T2又請求封鎖R1,則處於死鎖狀態。

操作系統采用的解決方法

一次封鎖法

要求每個事務必須一次將所有要使用的數據全部枷鎖,否則不能繼續。

缺點:降低了DBS並發度

順序封鎖發

預先對數據對象規定一個封鎖順序,所有事務按這個順序實施封鎖

缺點:維護資源封鎖順序成本太高

數據庫采用的解決辦法(診斷並解除死鎖)

超時法

設置一個事務的等待時間,超過則認為死鎖

缺點:等待時間不好設置

等待圖法

並發控制子系統周期性地生成事務等待圖,並進行檢測,如果存在回路,則表明出現了死鎖

技術分享

可串行化調度

概念

多個事務通過某一調度策略來並發執行的結果要與按某一次序串行執行這些事務的結果相同。稱這個調度策略為可串行化調度。

可串行性是並發事務調度的準則。

沖突操作

不同事務對同一個數據的讀寫操作和寫寫操作

沖突可串行化調度

一個調度Sc在保證沖突操作的次序不變的情況下,通過交換兩個事務不沖突操作的次序得到另一個調度Sc‘,如果Sc‘是串行的,則稱調度Sc為沖突可串行化的調度。

Sc1=r1(A) w1(A) r2(A) w2(A) r1(B) w1(B) r2(B) w2(B)

可以通過調換兩個事務的不沖突操作r2(A) w2(A) r1(B) w1(B),得到如下串行調度

Sc2= r1(A) w1(A) r1(B) w1(B) r2(A) w2(A) r2(B) w2(B)

則Sc1為沖突可串行化調度

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

L1=W1(Y) W1(X) W2(Y) W2(X) W3(X)是串行調度

L2= W1(Y) W2(Y)W1(X) W2(X) W3(X)是沖突可串行化調度,也是可串行化調度

L3= W1(Y) W2(Y W2(X))W1(X) W3(X)不是沖突可串行化調度,是可串行化調度

兩段鎖協議

作用:實現可串行化調度

原理:所有事務必須分兩個階段對數據項加鎖和解鎖。

在對任何數據進行讀、寫操作之前,首先獲得鎖;

在釋放一個封鎖之後,不能再申請任何形式的鎖。

與一次封鎖法異同:

兩端所協議的加鎖時間點可以不是同一時刻,而一次封鎖法必須是同一時刻;

遵循兩端所協議,依然有可能發生死鎖。

封鎖粒度

概念

封鎖對象的大小稱為封鎖粒度。如屬性值、元組、關系、索引等邏輯單元;或數據頁、索引頁、物理記錄等物理單元。

封鎖粒度越大,並發度越小,系統開銷越小

多粒度封鎖

多粒度樹:根節點是整個數據庫,葉結點是最小的數據粒度,註:最大最小自己控制。

多粒度封鎖協議允許多粒度樹中每個節點備獨立加鎖,但一個節點加鎖意味著這個節點的所有後裔節點都被加以同樣的鎖

顯式封鎖:直接加到該數據對象上的鎖

隱式封鎖:由於上級節點加鎖而導致該數據對象被加鎖

意向鎖

背景:由於檢查顯隱封鎖的效率很低(顯式需檢查所有後裔節點,隱式需檢查所有上級節點),所以引進意向鎖。

概念:對任一節點加鎖時,必須先對它的上層節點加意向鎖。

類型

意向共享鎖(IS鎖)

對某節點加S鎖,則對它的上層節點加IS鎖

意向排它鎖(IX鎖)

對某節點加X鎖,則對它的上層節點加IX鎖

共享意向排它鎖(SIX鎖)

如果對某個表加SIX鎖,表示該事務需要讀整個表(所以整個表S鎖),另要更新部分元組(所以要加IX鎖)

意向鎖的相容矩陣

技術分享

《數據庫系統概論》 -- 11.並發機制