來源: kt1776133839 發(fā)布時間:2018-11-21 14:28:18 閱讀量:1256
第十一章 并發(fā)控制
1、多用戶數(shù)據(jù)庫系統(tǒng)
允許多個用戶同時使用的數(shù)據(jù)庫系統(tǒng)
2、多事務(wù)執(zhí)行方式
(1)事務(wù)串行執(zhí)行
每個時刻只有一個事務(wù)運行,其他事務(wù)必須等到這個事務(wù)結(jié)束以后方能運行
不能充分利用系統(tǒng)資源,發(fā)揮數(shù)據(jù)庫共享資源的特點
(2)交叉并發(fā)方式(Interleaved Concurrency)
在單處理機系統(tǒng)中,事務(wù)的并行執(zhí)行是這些并行事務(wù)的并行操作輪流交叉運行
單處理機系統(tǒng)中的并行事務(wù)并沒有真正地并行運行,但能夠減少處理機的空閑時間,提高系統(tǒng)的效率
(3)同時并發(fā)方式(simultaneous concurrency)
多處理機系統(tǒng)中,每個處理機可以運行一個事務(wù),多個處理機可以同時運行多個事務(wù),實現(xiàn)多個事務(wù)真正的并行運行
最理想的并發(fā)方式,但受制于硬件環(huán)境
更復(fù)雜的并發(fā)方式機制
3、本章討論的數(shù)據(jù)庫系統(tǒng)并發(fā)控制技術(shù)是以單處理機系統(tǒng)為基礎(chǔ)的
4、事務(wù)并發(fā)執(zhí)行帶來的問題
(1)會產(chǎn)生多個事務(wù)同時存取同一數(shù)據(jù)的情況
(2)可能會存取和存儲不正確的數(shù)據(jù),破壞事務(wù)隔離性和數(shù)據(jù)庫的一致性
5、數(shù)據(jù)庫管理系統(tǒng)必須提供并發(fā)控制機制
6、并發(fā)控制機制是衡量一個數(shù)據(jù)庫管理系統(tǒng)性能的重要標(biāo)志之一
11.1.1 并發(fā)控制概述
1、事務(wù)是并發(fā)控制的基本單位
2、并發(fā)控制機制的任務(wù)
(1)對并發(fā)操作進(jìn)行正確調(diào)度
(2)保證事務(wù)的隔離性
(3)保證數(shù)據(jù)庫的一致性
3、并發(fā)操作帶來的數(shù)據(jù)不一致性
(1)丟失修改(Lost Update)
兩個事務(wù)T1和T2讀入同一數(shù)據(jù)并修改,T2的提交結(jié)果破壞了T1提交的結(jié)果,導(dǎo)致T1的修改被丟失。
(2)不可重復(fù)讀(Non-repeatable Read)
不可重復(fù)讀是指事務(wù)T1讀取數(shù)據(jù)后,事務(wù)T2執(zhí)行更新操作,使T1無法再現(xiàn)前一次讀取結(jié)果。
不可重復(fù)讀包括三種情況:
事務(wù)T1讀取某一數(shù)據(jù)后,事務(wù)T2對其做了修改,當(dāng)事務(wù)T1再次讀該數(shù)據(jù)時,得到與前一次不同的值 事務(wù)T1按一定條件從數(shù)據(jù)庫中讀取了某些數(shù)據(jù)記錄后,事務(wù)T2刪除了其中部分記錄,當(dāng)T1再次按相同條件讀取數(shù)據(jù)時,發(fā)現(xiàn)某些記錄神秘地消失了。
事務(wù)T1按一定條件從數(shù)據(jù)庫中讀取某些數(shù)據(jù)記錄后,事務(wù)T2插入了一些記錄,當(dāng)T1再次按相同條件讀取數(shù)據(jù)時,發(fā)現(xiàn)多了一些記錄。
后兩種不可重復(fù)讀有時也稱為幻影現(xiàn)象(Phantom Row)
(3)讀“臟”數(shù)據(jù)(Dirty Read)
讀“臟”數(shù)據(jù)是指:
事務(wù)T1修改某一數(shù)據(jù),并將其寫回磁盤
事務(wù)T2讀取同一數(shù)據(jù)后,T1由于某種原因被撤銷
這時T1已修改過的數(shù)據(jù)恢復(fù)原值,T2讀到的數(shù)據(jù)就與數(shù)據(jù)庫中的數(shù)據(jù)不一致
T2讀到的數(shù)據(jù)就為“臟”數(shù)據(jù),即不正確的數(shù)據(jù)
4、記號
(1)R(x):讀數(shù)據(jù)x
(2)W(x):寫數(shù)據(jù)x
5、數(shù)據(jù)不一致性:由于并發(fā)操作破壞了事務(wù)的隔離性
6、并發(fā)控制就是要用正確的方式調(diào)度并發(fā)操作,使一個用戶事務(wù)的執(zhí)行不受其他事務(wù)的干擾,從而避免造成數(shù)據(jù)的不一致性
7、對數(shù)據(jù)庫的應(yīng)用有時允許某些不一致性,例如有些統(tǒng)計工作涉及數(shù)據(jù)量很大,讀到一些“臟”數(shù)據(jù)對統(tǒng)計精度沒什么影響,可以降低對一致性的要求以減少系統(tǒng)開銷
8、并發(fā)控制的主要技術(shù)
封鎖(Locking)
時間戳(Timestamp)
樂觀控制法
多版本并發(fā)控制(MVCC)
11.2 封鎖
1、什么是封鎖
(1)封鎖就是事務(wù)T在對某個數(shù)據(jù)對象(例如表、記錄等)操作之前,先向系統(tǒng)發(fā)出請求,對其加鎖
(2)加鎖后事務(wù)T就對該數(shù)據(jù)對象有了一定的控制,在事務(wù)T釋放它的鎖之前,其它的事務(wù)不能更新此數(shù)據(jù)對象。
(3)封鎖是實現(xiàn)并發(fā)控制的一個非常重要的技術(shù)
2、基本封鎖類型
(1)一個事務(wù)對某個數(shù)據(jù)對象加鎖后究竟擁有什么樣的控制由封鎖的類型決定。
(2)基本封鎖類型
排它鎖(Exclusive Locks,簡記為X鎖)
排它鎖又稱為寫鎖。
若事務(wù)T對數(shù)據(jù)對象A加上X鎖,則只允許T讀取和修改A,其它任何事務(wù)都不能再對A加任何類型的鎖,直到T釋放A上的鎖。
保證其他事務(wù)在T釋放A上的鎖之前不能再讀取和修改A 。
共享鎖(Share Locks,簡記為S鎖)
共享鎖又稱為讀鎖
若事務(wù)T對數(shù)據(jù)對象A加上S鎖,則事務(wù)T可以讀A但不能修改A,其它事務(wù)只能再對A加S鎖,而不能加X鎖,直到T釋放A上的S鎖
保證其他事務(wù)可以讀A,但在T釋放A上的S鎖之前不能對A做任何修改
11.3 封鎖協(xié)議
1、什么是封鎖協(xié)議
(1)在運用X鎖和S鎖對數(shù)據(jù)對象加鎖時,需要約定一些規(guī)則,這些規(guī)則為封鎖協(xié)議(Locking Protocol)。
何時申請X鎖或S鎖
持鎖時間
何時釋放
(2)對封鎖方式規(guī)定不同的規(guī)則,就形成了各種不同的封鎖協(xié)議,它們分別在不同的程度上為并發(fā)操作的正確調(diào)度提供一定的保證。
2、保持?jǐn)?shù)據(jù)一致性的常用封鎖協(xié)議
一級封鎖協(xié)議
(1)事務(wù)T在修改數(shù)據(jù)R之前必須先對其加X鎖,直到事務(wù)結(jié)束才釋放。
正常結(jié)束(COMMIT)
非正常結(jié)束(ROLLBACK)
(2)一級封鎖協(xié)議可防止丟失修改,并保證事務(wù)T是可恢復(fù)的。
(3)在一級封鎖協(xié)議中,如果僅僅是讀數(shù)據(jù)不對其進(jìn)行修改,是不需要加鎖的,所以它不能保證可重復(fù)讀和不讀“臟”數(shù)據(jù)。
二級封鎖協(xié)議
(1)一級封鎖協(xié)議加上事務(wù)T在讀取數(shù)據(jù)R之前必須先對其加S鎖,讀完后即可釋放S鎖。
(2)二級封鎖協(xié)議可以防止丟失修改和讀“臟”數(shù)據(jù)。
(3)在二級封鎖協(xié)議中,由于讀完數(shù)據(jù)后即可釋放S鎖,所以它不能保證可重復(fù)讀。
三級封鎖協(xié)議
(1)一級封鎖協(xié)議加上事務(wù)T在讀取數(shù)據(jù)R之前必須先對其加S鎖,直到事務(wù)結(jié)束才釋放。
(2)三級封鎖協(xié)議可防止丟失修改、讀臟數(shù)據(jù)和不可重復(fù)讀。
封鎖協(xié)議小結(jié)
(1)三級協(xié)議的主要區(qū)別
什么操作需要申請封鎖以及何時釋放鎖(即持鎖時間)
(2)不同的封鎖協(xié)議使事務(wù)達(dá)到的一致性級別不同
封鎖協(xié)議級別越高,一致性程度越高
11.4 活鎖和死鎖
(1)封鎖技術(shù)可以有效地解決并行操作的一致性問題,但也帶來一些新的問題
死鎖
活鎖
11.4.1 活鎖
1、事務(wù)T1封鎖了數(shù)據(jù)R
2、事務(wù)T2又請求封鎖R,于是T2等待。
3、T3也請求封鎖R,當(dāng)T1釋放了R上的封鎖之后系統(tǒng)首先批準(zhǔn)了T3的請求,T2仍然等待。
4、T4又請求封鎖R,當(dāng)T3釋放了R上的封鎖之后系統(tǒng)又批準(zhǔn)了T4的請求……
5、T2有可能永遠(yuǎn)等待,這就是活鎖的情形
6、避免活鎖:采用先來先服務(wù)的策略
(1)當(dāng)多個事務(wù)請求封鎖同一數(shù)據(jù)對象時
(2)按請求封鎖的先后次序?qū)@些事務(wù)排隊
(3)該數(shù)據(jù)對象上的鎖一旦釋放,首先批準(zhǔn)申請隊列中第一個事務(wù)獲得鎖
11.4.2 死鎖
1、事務(wù)T1封鎖了數(shù)據(jù)R1
2、T2封鎖了數(shù)據(jù)R2
3、T1又請求封鎖R2,因T2已封鎖了R2,于是T1等待T2釋放R2上的鎖
4、接著T2又申請封鎖R1,因T1已封鎖了R1,T2也只能等待T1釋放R1上的鎖
5、這樣T1在等待T2,而T2又在等待T1,T1和T2兩個事務(wù)永遠(yuǎn)不能結(jié)束,形成死鎖
6、解決死鎖的方法
兩類方法
(1)死鎖的預(yù)防
(2)死鎖的診斷與解除
7、死鎖的預(yù)防
(1)產(chǎn)生死鎖的原因是兩個或多個事務(wù)都已封鎖了一些數(shù)據(jù)對象,然后又都請求對已為其他事務(wù)封鎖的數(shù)據(jù)對象加鎖,從而出現(xiàn)死等待。
(2)預(yù)防死鎖的發(fā)生就是要破壞產(chǎn)生死鎖的條件
(3)預(yù)防死鎖的方法
一次封鎖法
順序封鎖法
8、 死鎖的診斷與解除
(1)死鎖的診斷
超時法
如果一個事務(wù)的等待時間超過了規(guī)定的時限,就認(rèn)為發(fā)生了死鎖
優(yōu)點:實現(xiàn)簡單
缺點:
有可能誤判死鎖
時限若設(shè)置得太長,死鎖發(fā)生后不能及時發(fā)現(xiàn)
等待圖法
用事務(wù)等待圖動態(tài)反映所有事務(wù)的等待情況
事務(wù)等待圖是一個有向圖G=(T,U)。
T為結(jié)點的集合,每個結(jié)點表示正運行的事務(wù)。
U為邊的集合,每條邊表示事務(wù)等待的情況。
若T1等待T2,則T1,T2之間劃一條有向邊,從T1指向T2
并發(fā)控制子系統(tǒng)周期性地(比如每隔數(shù)秒)生成事務(wù)等待圖,檢測事務(wù)。如果發(fā)現(xiàn)圖中存在回路,則表示系統(tǒng)中出現(xiàn)了死鎖。
解除死鎖
選擇一個處理死鎖代價最小的事務(wù),將其撤消
釋放此事務(wù)持有的所有的鎖,使其它事務(wù)能繼續(xù)運行下去
11.5 并發(fā)調(diào)度的可串行性
1、數(shù)據(jù)庫管理系統(tǒng)對并發(fā)事務(wù)不同的調(diào)度可能會產(chǎn)生不同的結(jié)果
2、串行調(diào)度是正確的
3、執(zhí)行結(jié)果等價于串行調(diào)度的調(diào)度也是正確的,稱為可串行化調(diào)度
11.5.1 可串行化調(diào)度
1、可串行化(Serializable)調(diào)度
多個事務(wù)的并發(fā)執(zhí)行是正確的,當(dāng)且僅當(dāng)其結(jié)果與按某一次序串行地執(zhí)行這些事務(wù)時的結(jié)果相同
2、可串行性(Serializability)
(1)是并發(fā)事務(wù)正確調(diào)度的準(zhǔn)則
(2)一個給定的并發(fā)調(diào)度,當(dāng)且僅當(dāng)它是可串行化的,才認(rèn)為是正確調(diào)度
11.5.2 沖突可串行化調(diào)度
1、沖突可串行化
(1)一個比可串行化更嚴(yán)格的條件
(2)商用系統(tǒng)中的調(diào)度器采用
2、沖突操作:是指不同的事務(wù)對同一數(shù)據(jù)的讀寫操作和寫寫操作:
Ri(x)與Wj(x) /*事務(wù)Ti讀x,Tj寫x,其中i≠j*/
Wi(x)與Wj(x) /*事務(wù)Ti寫x,Tj寫x,其中i≠j*/
其他操作是不沖突操作
3、沖突
不能交換(Swap)的動作:
同一事務(wù)的兩個操作
不同事務(wù)的沖突操作
4、沖突可串行化(續(xù))
(1)一個調(diào)度Sc在保證沖突操作的次序不變的情況下,通過交換兩個事務(wù)不沖突操作的次序得到另一個調(diào)度Sc’,如果Sc’是串行的,稱調(diào)度Sc是沖突可串行化的調(diào)度
(2)若一個調(diào)度是沖突可串行化,則一定是可串行化的調(diào)度
(3)可用這種方法判斷一個調(diào)度是否是沖突可串行化的
(4)沖突可串行化調(diào)度是可串行化調(diào)度的充分條件,不是必要條件。還有不滿足沖突可串行化條件的可串行化調(diào)度。
11.6 兩段鎖協(xié)議
1、數(shù)據(jù)庫管理系統(tǒng)普遍采用兩段鎖協(xié)議的方法實現(xiàn)并發(fā)調(diào)度的可串行性,從而保證調(diào)度的正確性
2、兩段鎖協(xié)議
指所有事務(wù)必須分兩個階段對數(shù)據(jù)項加鎖和解鎖
(1)在對任何數(shù)據(jù)進(jìn)行讀、寫操作之前,事務(wù)首先要獲得對該數(shù)據(jù)的封鎖
(2)在釋放一個封鎖之后,事務(wù)不再申請和獲得任何其他封鎖
“3、兩段”鎖的含義
事務(wù)分為兩個階段
(1)第一階段是獲得封鎖,也稱為擴(kuò)展階段
事務(wù)可以申請獲得任何數(shù)據(jù)項上的任何類型的鎖,但是不能釋放任何鎖
(2)第二階段是釋放封鎖,也稱為收縮階段
事務(wù)可以釋放任何數(shù)據(jù)項上的任何類型的鎖,但是不能再申請任何鎖
4、事務(wù)遵守兩段鎖協(xié)議是可串行化調(diào)度的充分條件,而不是必要條件。
5、若并發(fā)事務(wù)都遵守兩段鎖協(xié)議,則對這些事務(wù)的任何并發(fā)調(diào)度策略都是可串行化的
6、若并發(fā)事務(wù)的一個調(diào)度是可串行化的,不一定所有事務(wù)都符合兩段鎖協(xié)議
7、兩段鎖協(xié)議與防止死鎖的一次封鎖法
(1)一次封鎖法要求每個事務(wù)必須一次將所有要使用的數(shù)據(jù)全部加鎖,否則就不能繼續(xù)執(zhí)行,因此一次封鎖法遵守兩段鎖協(xié)議
(2)但是兩段鎖協(xié)議并不要求事務(wù)必須一次將所有要使用的數(shù)據(jù)全部加鎖,因此遵守兩段鎖協(xié)議的事務(wù)可能發(fā)生死鎖
11.7 封鎖的粒度
1、封鎖對象的大小稱為封鎖粒度(Granularity)
2、封鎖的對象:邏輯單元,物理單元
3、選擇封鎖粒度原則
(1)封鎖粒度與系統(tǒng)的并發(fā)度和并發(fā)控制的開銷密切相關(guān)。
封鎖的粒度越大,數(shù)據(jù)庫所能夠封鎖的數(shù)據(jù)單元就越少,并發(fā)度就越小,系統(tǒng)開銷也越??;
封鎖的粒度越小,并發(fā)度較高,但系統(tǒng)開銷也就越大
11.7.1 多粒度封鎖
1、多粒度樹
(1)以樹形結(jié)構(gòu)來表示多級封鎖粒度。
(2)根結(jié)點是整個數(shù)據(jù)庫,表示最大的數(shù)據(jù)粒度。
(3)葉結(jié)點表示最小的數(shù)據(jù)粒度。
2、允許多粒度樹中的每個結(jié)點被獨立地加鎖
3、對一個結(jié)點加鎖意味著這個結(jié)點的所有后裔結(jié)點也被加以同樣類型的鎖
4、在多粒度封鎖中一個數(shù)據(jù)對象可能以兩種方式封鎖:顯式封鎖和隱式封鎖
5、顯式封鎖和隱式封鎖
(1)顯式封鎖: 直接加到數(shù)據(jù)對象上的封鎖。
(2)隱式封鎖:是該數(shù)據(jù)對象沒有獨立加鎖,是由于其上級結(jié)點加鎖而使該數(shù)據(jù)對象加上了鎖
(3)顯式封鎖和隱式封鎖的效果是一樣的
(4)系統(tǒng)檢查封鎖沖突時
要檢查顯式封鎖
還要檢查隱式封鎖
(5)對某個數(shù)據(jù)對象加鎖,系統(tǒng)要檢查
該數(shù)據(jù)對象
有無顯式封鎖與之沖突
所有上級結(jié)點
檢查本事務(wù)的顯式封鎖是否與該數(shù)據(jù)對象上的隱式封鎖沖突:(由上級結(jié)點已加的封鎖造成的)
所有下級結(jié)點
看上面的顯式封鎖是否與本事務(wù)的隱式封鎖(將加到下級結(jié)點的封鎖)沖突
11.7.2 意向鎖
1、引進(jìn)意向鎖(intention lock)目的
提高對某個數(shù)據(jù)對象加鎖時系統(tǒng)的檢查效率
2、如果對一個結(jié)點加意向鎖,則說明該結(jié)點的下層結(jié)點正在被加鎖
3、對任一結(jié)點加基本鎖,必須先對它的上層結(jié)點加意向鎖
4、常用意向鎖
意向共享鎖(Intent Share Lock,簡稱IS鎖)
意向排它鎖(Intent Exclusive Lock,簡稱IX鎖)
共享意向排它鎖(Share Intent Exclusive Lock,簡稱SIX鎖)
5、IS鎖
如果對一個數(shù)據(jù)對象加IS鎖,表示它的后裔結(jié)點擬(意向)加S鎖。
6、IX鎖
如果對一個數(shù)據(jù)對象加IX鎖,表示它的后裔結(jié)點擬(意向)加X鎖。
7、SIX鎖
如果對一個數(shù)據(jù)對象加SIX鎖,表示對它加S鎖,再加IX鎖,即SIX = S + IX。
8、具有意向鎖的多粒度封鎖方法
(1)申請封鎖時應(yīng)該按自上而下的次序進(jìn)行
(2)釋放封鎖時則應(yīng)該按自下而上的次序進(jìn)行
9、具有意向鎖的多粒度封鎖方法
(1)提高了系統(tǒng)的并發(fā)度
(2)減少了加鎖和解鎖的開銷
(3)在實際的數(shù)據(jù)庫管理系統(tǒng)產(chǎn)品中得到廣泛應(yīng)用
11.9 小結(jié)
1、數(shù)據(jù)庫的并發(fā)控制以事務(wù)為單位
2、數(shù)據(jù)庫的并發(fā)控制通常使用封鎖機制
(1)基本封鎖
(2)多粒度封鎖
3、活鎖和死鎖
4、并發(fā)事務(wù)調(diào)度的正確性
(1)可串行性
并發(fā)操作的正確性則通常由兩段鎖協(xié)議來保證。
兩段鎖協(xié)議是可串行化調(diào)度的充分條件,但不是必要條件
(2)沖突可串行性
5、其他并發(fā)控制機制
時間戳方法
樂觀控制法
多版本并發(fā)控制
---------------------