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