併發控制的主要技術 封鎖

2021-07-12 07:23:37 字數 3703 閱讀 4297

上篇部落格通過一些例項介紹了併發導致的資料不一致一系列問題——丟失修改、讀髒資料、不可重複讀

本篇部落格介紹如何進行併發控制。

——封鎖。

(1)封鎖就是事務

t在對某資料物件

(例如:表、記錄

)操作之前,先向系統發出請求,對其加鎖(2

)加鎖後事務

t就對資料物件有了一定的控制,在事務

t釋放它的鎖之前,其他的事務不能更新此資料物件

不同的鎖有不同的控制功能;即,乙個事務對資料物件加鎖後可有怎樣的控制由它的封鎖型別決定。a.

含義:若事務

t對資料物件a加上

x鎖,則只允許

t讀取和修改

a,其他任何事務都不能再對

a加任何型別的鎖,直到t釋放

a上的鎖。b.

功能:保證其他事務在事務

t釋放資料物件

a上的鎖之前不能在讀和修改a。

a.含義:若事務

t對資料物件a加上

s鎖,則其他事務只能再對a加

s鎖,而不能加

x鎖,直到t釋放

a上的s鎖

b.功能:保證其他事務可以讀資料物件

a,但在事務t釋放

a上的s鎖之前不能對

a做任何修改、

關注點在**,一級封鎖協議的關注點是事務修改的資料,二級和**是事務讀取的資料

a.內容:事務

t在修改資料物件

a之前必須對其加

x鎖,直到

事務結束才釋放。b.

可解決的問題:「丟失修改」問題t1

t2 解釋

①xlock a 事務

t1在讀

a進行修改之前先對a加

x鎖 ②

r(a)=16

xlock a當t2

再請求對a加

x鎖時被拒絕 ③

a←a-1

等待t2

只能等待

t1釋放

a上的鎖後

t2獲得對a的

x鎖w(a)=15

等待commit

等待unlock a等待④

獲得xlock a

r(a)=15

這時t2

讀到的a

已經是t1

更新過的值15

a←a-1

t2按此新的

a值進行運算,並將結果值

a=14

送回到磁碟。避免了丟失

t1的更新。 ⑤

w(a)=14

commit

unlock a

思考:一級封鎖協議為什麼不能解決髒讀和不可重複讀問題?

在一級封鎖協議中,如果僅僅是讀資料不對其進行修改,是不需要加鎖的,所以它不能保證可重複讀和不讀「髒」資料。即,事務1對r加了排他鎖,對資料r進行了修改,若事事務2對r申請鎖,則會wait;若事務2不對r申請任何鎖,則即使事務1對r加了排他鎖,事務2也會無視,可以讀!所以不能解決髒讀和不可重複讀問題a.

內容:在一級封鎖協議的基礎上,另外加上事務

t在讀取資料物件

a之前必須對其加s鎖,

讀完後立即釋放。b

.可以解決的問題:「丟失修改」、「讀髒資料」問題

t1t2解釋

①xlock c 事務

t1在對

c進行修改之前,先對c加

x鎖,修改其值後寫回磁碟

r(c)=100

c←c*2

w(c)=200

②slock c

t2請求在c上加

s鎖,因

t1已在

c上加了x鎖,

t2只能等待

等待 ③

rollback等待

(c恢復為100)等待

t1因某種原因被撤銷,

c恢復為原值

100

unlock c 等待

④ 獲得slock c

r(c)=100 t1

釋放c上的x

鎖後t2獲得c

上的s鎖,讀c=100

。避免了

t2讀「髒」資料 ⑤

commit c

unlock c

思考:為什麼二級封鎖不能解決「不可重複讀」問題?

——事務

1讀取資料時加上共享鎖後(這樣在事務1讀取資料的過程中,其他事務就不會修改該資料),

不允許任何事物操作該資料,只能讀取,之後

1如果有更新操作,那麼會轉換為排他鎖,其他事務更無權參與進來讀寫,

這樣就防止了髒讀問題。但是當事務

1讀取資料過程中,有可能其他事務(例如事務2)也讀取了該資料,事務1讀取完畢後共享鎖釋放(此時事務1還未完),

此時事務2

修改資料,修改完畢提交事務,那麼事務1再次讀取資料時候發現資料不一致,就會出現不可重複讀問題,

所以這樣不能夠避免不可重複讀問題。a.

內容:在一級封鎖協議的基礎上,另外加上事務

t在讀取資料物件

a之前必須對其加

s鎖,直到

事務結束才釋放。b

.可以解決的問題:「丟失修改」、「讀髒資料」、「不可重複讀」問題t1

t2解釋

事務t1在讀a

,b之前,先對a,

b加s鎖;

其他事務只能再對a,

b加s鎖,而不能加

x鎖,即其他事務只能讀a,

b,而不能修改

slock b

r(a)=50

r(b)=100

求和=150

② xlock b

當t2為修改b

而申請對b的

x鎖時被拒絕只能等待

t1釋放

b上的鎖

t1為驗算再讀a,

b,這時讀出的b仍是

100,求和結果仍為

150,即可重複讀

t1結束才釋放a,

b上的s鎖。

t2才獲得對b的

x鎖 等待

等待③r(a)=50等待

r(b)=100 等待

求和=150等待

commit 等待

unlock a 等待

unlock b 等待

④ 獲得xlockb

r(b)=100

b←b*2 ⑤

w(b)=200

commit

unlock b

注:關注點在**?

——一級封鎖協議的關注點是事務修改的資料,二級和**是事務讀取的資料

(1)鎖的相容矩陣:

(如果r

上加了x

鎖後,就不能再加任何鎖!如果

r上加了

s鎖後,只能再加

s鎖而不能再加

x鎖!) (

2) x

鎖s鎖

無丟失修改

無汙讀可更新

事務結束釋放

事務結束釋放

讀完釋放

一級封鎖協議√

√ 二級封鎖協議√

√ √√

**封鎖協議√

√ √

√ √

併發控制的主要技術 封鎖

上篇部落格通過一些例項介紹了併發導致的資料不一致一系列問題 丟失修改 讀髒資料 不可重複讀 併發操作與資料的不一致性 本篇部落格介紹如何進行併發控制。封鎖。1 封鎖就是事務 t在對某資料物件 例如 表 記錄 操作之前,先向系統發出請求,對其加鎖 2 加鎖後事務 t就對資料物件有了一定的控制,在事務 ...

回滾機制 05 基於封鎖的併發控制機制

死鎖 兩個或兩個以上事務處於等待狀態,每個事務都在等待其中另乙個事務釋放資源,導致所有事務都無法執行,這種現象稱為死鎖。處理死鎖的方法 一 引入死鎖預防協議,使系統不進入死鎖狀態 通過對加鎖請求進行排序,一事務開始前要鎖定所有的資料項 二 允許系統進入死鎖狀態,引入死鎖檢測和死鎖恢復機制進行恢復。比...

資料庫併發控制技術

事務是一系列的資料庫操作,是資料庫應用程式的基本邏輯單元,也是恢復和併發控制的基本單位。事務處理技術主要包括資料庫恢復技術和併發控制技術。本篇博文主要總結下併發控制技術。事務 是使用者定義的乙個資料庫操作序列,這些操作要麼全做,要麼全不做,是乙個不可分割的工作單位。例如,在關聯式資料庫中,乙個事務可...