版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
并發(fā)控制第8章概述封鎖封鎖協(xié)議活鎖和死鎖并發(fā)調(diào)度的可串行性兩段鎖協(xié)議
封鎖的粒度
Oracle的并發(fā)控制1數(shù)據(jù)不一致的情況及其確切含義;封鎖的類型;不同封鎖類型的性質(zhì)和定義;封鎖協(xié)議的概念;封鎖粒度的概念;多粒度封鎖方法及多粒度封鎖協(xié)議的相容控制矩陣。學習重點
學習難點第8章重點與難點
兩段鎖協(xié)議與串行性的關系;兩段鎖協(xié)議與死鎖的關系;具有意向鎖的多粒度封鎖方法的封鎖過程。2多事務執(zhí)行方式(1)事務串行執(zhí)行每個時刻只有一個事務運行不能充分利用系統(tǒng)資源,發(fā)揮數(shù)據(jù)庫共享資源的特點。(2)交叉并發(fā)方式(interleavedconcurrency)事務的并行執(zhí)行是這些并行事務的并行操作輪流交叉運行單處理機系統(tǒng)中的并發(fā)方式,能夠減少處理機的空閑時間,提高系統(tǒng)的效率。(3)同時并發(fā)方式(simultaneousconcurrency)多處理機系統(tǒng)中,每個處理機可以運行一個事務,多個處理機可以同時運行多個事務,實現(xiàn)多個事務真正的并行運行。最理想的并發(fā)方式更復雜的并發(fā)方式機制概述3事務并發(fā)執(zhí)行帶來的問題可能會存取和存儲不正確的數(shù)據(jù),破壞事務的隔離性和數(shù)據(jù)庫的一致性。DBMS必須提供并發(fā)控制機制并發(fā)控制機制是衡量一個DBMS性能的重要標志之一。48.1并發(fā)控制概述并發(fā)控制機制的任務對并發(fā)操作進行正確調(diào)度保證事務的隔離性保證數(shù)據(jù)庫的一致性5數(shù)據(jù)不一致實例:飛機訂票系統(tǒng)
讀A=16
A←A-3寫回A=13①讀A=16
②
③A←A-1寫回A=15
④事務T2事務T1T1的修改被T2覆蓋了!6并發(fā)操作帶來的數(shù)據(jù)不一致性丟失修改(lostupdate)不可重復讀(non-repeatableread)讀“臟”數(shù)據(jù)(dirtyread)丟失修改是指事務1與事務2從數(shù)據(jù)庫中讀入同一數(shù)據(jù)并修改,事務2的提交結果破壞了事務1提交的結果,導致事務1的修改被丟失。不可重復讀是指事務1讀取數(shù)據(jù)后,事務2執(zhí)行更新操作,使事務1無法再現(xiàn)前一次讀取結果。事務1修改某一數(shù)據(jù),并將其寫回磁盤;事務2讀取同一數(shù)據(jù)后;事務1由于某種原因被撤消,這時事務1已修改過的數(shù)據(jù)恢復原值;事務2讀到的數(shù)據(jù)就與數(shù)據(jù)庫中的數(shù)據(jù)不一致,是不正確的數(shù)據(jù),又稱為“臟”數(shù)據(jù)。7T1T2①讀A=16
②
③A←A-1寫回A=15
④
讀A=16
A←A-1寫回A=15(a)丟失修改
讀C=200
①讀C=100C←C*2寫回C②
③ROLLBACKC恢復為100T2T1(c)讀“臟”數(shù)據(jù)
讀B=100B←B*2寫回B=200
①讀A=50讀B=100求和=150②
③讀A=50讀B=200求和=250(驗算不對)T2T1(b)不可重復讀88.2封鎖(Locking)什么是封鎖基本封鎖類型基本鎖的相容矩陣9封鎖的概念封鎖就是事務T在對某個數(shù)據(jù)對象(例如表、記錄等)操作之前,先向系統(tǒng)發(fā)出請求,對其加鎖。加鎖后事務T就對該數(shù)據(jù)對象有了一定的控制,在事務T釋放它的鎖之前,其它的事務不能更新此數(shù)據(jù)對象。封鎖是實現(xiàn)并發(fā)控制的一個非常重要的技術。10基本封鎖類型DBMS通常提供了多種類型的封鎖。一個事務對某個數(shù)據(jù)對象加鎖后究竟擁有什么樣的控制是由封鎖的類型決定的。基本封鎖類型排它鎖(Exclusivelock,簡記為X鎖)共享鎖(Sharelock,簡記為S鎖)若事務T對數(shù)據(jù)對象A加上X鎖,則只允許T讀取和修改A,其它任何事務都不能再對A加任何類型的鎖,直到T釋放A上的鎖。若事務T對數(shù)據(jù)對象A加上S鎖,則其它事務只能再對A加S鎖,而不能加X鎖,直到T釋放A上的S鎖。11鎖的相容矩陣Y=Yes,相容的請求N=No,不相容的請求T1T2XS-XNNYSNYY-YYY128.3封鎖協(xié)議在運用X鎖和S鎖對數(shù)據(jù)對象加鎖時,需要約定一些規(guī)則:封鎖協(xié)議(LockingProtocol)
何時申請X鎖或S鎖持鎖時間、何時釋放不同的封鎖協(xié)議,在不同的程度上為并發(fā)操作的正確調(diào)度提供一定的保證常用的封鎖協(xié)議:三級封鎖協(xié)議131級封鎖協(xié)議事務T在修改數(shù)據(jù)R之前必須先對其加X鎖,直到事務結束才釋放正常結束(COMMIT)非正常結束(ROLLBACK)1級封鎖協(xié)議可防止丟失修改在1級封鎖協(xié)議中,如果是讀數(shù)據(jù),不需要加鎖的,所以它不能保證可重復讀和不讀“臟”數(shù)據(jù)。14T1T2①
XlockA獲得②
讀A=16
③A←A-1寫回A=15CommitUnlockA④
⑤
XlockA等待等待等待等待獲得XlockA讀A=15A←A-1寫回A=14CommitUnlockA
沒有丟失修改
讀A=15①
XlockA獲得②
讀A=16
A←A-1寫回A=15③
④RollbackUnlockA
T2T1讀“臟”數(shù)據(jù)15
XlockB獲得讀B=100B←B*2寫回B=200CommitUnlockB①讀A=50讀B=100求和=150②③讀A=50讀B=200求和=250(驗算不對)T2T1不可重復讀162級封鎖協(xié)議1級封鎖協(xié)議+事務T在讀取數(shù)據(jù)R前必須先加S鎖,讀完后即可釋放S鎖2級封鎖協(xié)議可以防止丟失修改和讀“臟”數(shù)據(jù)。在2級封鎖協(xié)議中,由于讀完數(shù)據(jù)后即可釋放S鎖,所以它不能保證可重復讀。17不可重復讀①
SclockA獲得讀A=50UnlockA②SclockB獲得讀B=100UnlockB③求和=150
XlockB等待等待獲得XlockB讀B=100B←B*2寫回B=200CommitUnlockBT2T1④SclockA獲得讀A=50UnlockASclockB獲得讀B=200UnlockB求和=250(驗算不對)
T2T1(續(xù))183級封鎖協(xié)議1級封鎖協(xié)議+事務T在讀取數(shù)據(jù)R之前必須先對其加S鎖,直到事務結束才釋放3級封鎖協(xié)議可防止丟失修改、讀臟數(shù)據(jù)和不可重復讀。19T1T2①
SlockA讀A=50SlockB讀B=100求和=150②
③讀A=50讀B=100求和=150CommitUnlockAUnlockB④
⑤
XlockB等待等待等待等待等待等待等待等待獲得XlockB讀B=100B←B*2寫回B=200CommitUnlockB
可重復讀T1T2①
XlockC讀C=100C←C*2寫回C=200②
③ROLLBACK(C恢復為100)UnlockC④
⑤
SlockC等待等待等待等待獲得SlockC讀C=100CommitCUnlockC不讀“臟”數(shù)據(jù)20三級協(xié)議的主要區(qū)別什么操作需要申請封鎖何時釋放鎖(即持鎖時間)封鎖協(xié)議小結21封鎖效果演示228.4活鎖和死鎖封鎖技術可以有效地解決并行操作的一致性問題,但也帶來一些新的問題死鎖活鎖23活鎖T2有可能永遠等待,這就是活鎖的情形。24采用先來先服務的策略:當多個事務請求封鎖同一數(shù)據(jù)對象時按請求封鎖的先后次序?qū)@些事務排隊該數(shù)據(jù)對象上的鎖一旦釋放,首先批準申請隊列中第一個事務獲得鎖。如何避免活鎖25死鎖T1和T2兩個事務永遠不能結束,形成死鎖。26解決死鎖的方法預防死鎖
一次封鎖法
順序封鎖法死鎖的診斷與解除
超時法
等待圖法結論操作系統(tǒng)中廣為采用的預防死鎖的策略并不很適合數(shù)據(jù)庫DBMS解決死鎖更普遍采用的是診斷并解除死鎖的方法27一次封鎖法要求每個事務必須一次將所有要使用的數(shù)據(jù)全部加鎖,否則就不能繼續(xù)執(zhí)行。一次封鎖法存在的問題:降低并發(fā)度將以后要用到的全部數(shù)據(jù)加鎖,勢必擴大了封鎖的范圍,從而降低了系統(tǒng)的并發(fā)度。執(zhí)行過程時很難事先精確地確定每個事務所要封鎖地數(shù)據(jù)對象,須將執(zhí)行過程中可能要封鎖的對象全部加鎖,從而進一步降低了并發(fā)度。28順序封鎖法順序封鎖法是預先對數(shù)據(jù)對象規(guī)定一個封鎖順序,所有事務都按這個順序?qū)嵭蟹怄i。例:規(guī)定數(shù)據(jù)對象的封鎖順序為A,B,C,D,E。事務T3起初要求封鎖數(shù)據(jù)對象B,C,E,但當它封鎖了B,C后,才發(fā)現(xiàn)還需要封鎖A,這樣就破壞了封鎖順序.順序封鎖法存在的問題數(shù)據(jù)庫系統(tǒng)中可封鎖的數(shù)據(jù)對象極其眾多,并且不斷地變化,要維護這樣的資源的封鎖順序非常困難,成本很高。很難事先確定每個事務要封鎖的對象,因此很難按規(guī)定的順序去施加封鎖。29超時法如果一個事務的等待時間超過了規(guī)定的時限,就認為發(fā)生了死鎖。優(yōu)點:實現(xiàn)簡單缺點有可能誤判死鎖時限若設置得太長,死鎖發(fā)生后不能及時發(fā)現(xiàn)30等待圖法用事務等待圖動態(tài)反映所有事務的等待情況事務等待圖是一個有向圖G=(T,U)T為結點的集合,每個結點表示正運行的事務U為邊的集合,每條邊表示事務等待的情況若T1等待T2,則T1,T2之間劃一條有向邊,從T1指向T2并發(fā)控制子系統(tǒng)周期性地(比如每隔1min)檢測事務等待圖,如果發(fā)現(xiàn)圖中存在回路,則表示系統(tǒng)中出現(xiàn)了死鎖。解除死鎖選擇一個處理死鎖代價最小的事務,將其撤消,釋放此事務持有的所有的鎖,使其它事務能繼續(xù)運行下去。318.5并發(fā)調(diào)度的可串行性
什么樣的并發(fā)操作調(diào)度是正確的
如何保證并發(fā)操作的調(diào)度是正確的32并發(fā)調(diào)度正確的判斷計算機系統(tǒng)對并行事務中并行操作的調(diào)度是的隨機的,而不同的調(diào)度可能會產(chǎn)生不同的結果。如果一個事務運行過程中沒有其他事務在同時運行,也就是說它沒有受到其他事務的干擾,那么就可以認為該事務的運行結果是正常的。以不同的順序串行執(zhí)行事務有可能會產(chǎn)生不同的結果,但由于不會將數(shù)據(jù)庫置于不一致狀態(tài),所以都認為是正確的。
幾個事務的并行執(zhí)行是正確的,當且僅當其結果與按某一次序串行地執(zhí)行它們時的結果相同。這種并行調(diào)度策略稱為可串行化(Serializable)的調(diào)度。33可串行性是并行事務正確性的唯一準則例:現(xiàn)在有兩個事務,分別包含下列操作:事務1:讀B;A=B+1;寫回A;事務2:讀A;B=A+1;寫回B;假設A的初值為2,B的初值為2。對這兩個事務的不同調(diào)度策略串行執(zhí)行串行調(diào)度策略1串行調(diào)度策略2交錯執(zhí)行不可串行化的調(diào)度可串行化的調(diào)度34SlockBY=B=2UnlockBXlockAA=Y+1寫回A(=3)UnlockA
SlockAX=A=3UnlockAXlockBB=X+1寫回B(=4)UnlockB
T1T2
SlockBY=B=3UnlockBXlockAA=Y+1寫回A(=4)UnlockA
SlockAX=A=2UnlockAXlockBB=X+1寫回B(=3)UnlockB
T1T2串行調(diào)度策略,正確的調(diào)度35SlockBY=B=2UnlockBXlockA
A=Y+1寫回A(=3)UnlockA
SlockA等待等待等待X=A=3UnlockAXlockBB=X+1寫回B(=4)UnlockBT1T2SlockBY=B=2
UnlockB
XlockAA=Y+1寫回A(=3)
UnlockA
SlockAX=A=2
UnlockA
XlockBB=X+1寫回B(=3)
UnlockBT1T2不可串行化的調(diào)度可串行化的調(diào)度36并發(fā)調(diào)度正確的保證從理論上講,在某一事務執(zhí)行時禁止其他事務執(zhí)行的調(diào)度策略一定是可串行化的調(diào)度,這也是最簡單的調(diào)度策略,但這種方法實際上是不可行的,因為它使用戶不能充分共享數(shù)據(jù)庫資源。保證并發(fā)操作調(diào)度正確性的方法封鎖方法:兩段鎖(Two-PhaseLocking,簡稱2PL)協(xié)議時標方法樂觀方法378.6兩段鎖協(xié)議兩段鎖協(xié)議(加鎖和解鎖)的內(nèi)容在對任何數(shù)據(jù)進行讀、寫操作之前,事務首先要獲得對該數(shù)據(jù)的封鎖。在釋放一個封鎖之后,事務不再獲得任何其他封鎖。“兩段”鎖的含義事務分為兩個階段第一階段是獲得封鎖,也稱為擴展階段;第二階段是釋放封鎖,也稱為收縮階段。38例:事務1的封鎖序列:SlockA...SlockB...XlockC...UnlockB...UnlockA...UnlockC;事務2的封鎖序列:SlockA...UnlockA...SlockB...XlockC...UnlockC...UnlockB;事務1遵守兩段鎖協(xié)議,而事務2不遵守兩段協(xié)議。39并行執(zhí)行的所有事務均遵守兩段鎖協(xié)議,則對這些事務的所有并行調(diào)度策略都是可串行化的。
所有遵守兩段鎖協(xié)議的事務,其并行執(zhí)行的結果一定是正確的。事務遵守兩段鎖協(xié)議是可串行化調(diào)度的充分條件,而不是必要條件??纱谢恼{(diào)度中,不一定所有事務都必須符合兩段鎖協(xié)議。40T1SlockB讀B=2Y=BXlockA
A=Y+1寫回A=3UnlockBUnlockA
T2
SlockA等待等待等待等待等待SlockA讀A=3Y=AXlockBB=Y+1寫回B=4UnlockBUnlockA
T1SlockB讀B=2Y=BUnlockBXlockA
A=Y+1寫回A=3UnlockA
T2
SlockA等待等待等待等待SlockA讀A=3X=AUnlockAXlockBB=X+1寫回B=4UnlockB
(a)遵守兩段鎖協(xié)議
(b)不遵守兩段鎖協(xié)議T1SlockB讀B=2Y=BUnlockBXlockAA=Y+1寫回A=3UnlockAT2
SlockA讀A=2X=AUnlockAXlockB等待XlockBB=X+1寫回B=3UnlockB
(c)不遵守兩段鎖協(xié)議41一次封鎖法要求每個事務必須一次將所有要使用的數(shù)據(jù)全部加鎖,否則就不能繼續(xù)執(zhí)行,因此一次封鎖法遵守兩段鎖協(xié)議。但是兩段鎖協(xié)議并不要求事務必須一次將所有要使用的數(shù)據(jù)全部加鎖,因此遵守兩段鎖協(xié)議的事務可能發(fā)生死鎖。兩段鎖協(xié)議與防止死鎖的一次封鎖法42T1SlockB讀B=2
XlockA等待等待T2
SlockA讀A=2
XlockB等待圖遵守兩段鎖協(xié)議的事務發(fā)生死鎖438.7封鎖的粒度X鎖和S鎖都是加在某一個數(shù)據(jù)對象上的封鎖的對象:邏輯單元,物理單元例:在關系數(shù)據(jù)庫中,封鎖對象:邏輯單元:屬性值、屬性值集合、元組、關系、索引項、整個索引、整個數(shù)據(jù)庫等。物理單元:頁(數(shù)據(jù)頁或索引頁)、塊等。封鎖對象可以很大也可以很小例:對整個數(shù)據(jù)庫加鎖或?qū)δ硞€屬性值加鎖44封鎖對象的大小稱為封鎖的粒度(Granularity)多粒度封鎖(multiplegranularitylocking)在一個系統(tǒng)中同時支持多種封鎖粒度供不同的事務選擇封鎖的粒度越大小系統(tǒng)被封鎖的對象少多并發(fā)度小高系統(tǒng)開銷小大選擇封鎖粒度:考慮封鎖機構和并發(fā)度兩個因素對系統(tǒng)開銷與并發(fā)度進行權衡45需要處理多個關系的大量元組的用戶事務:以數(shù)據(jù)庫為封鎖單位;需要處理大量元組的用戶事務:以關系為封鎖單元;只處理少量元組的用戶事務:以元組為封鎖單位。選擇封鎖粒度的原則468.7.1多粒度封鎖多粒度樹以樹形結構來表示多級封鎖粒度根結點是整個數(shù)據(jù)庫,表示最大的數(shù)據(jù)粒度葉結點表示最小的數(shù)據(jù)粒度
例:三級粒度樹。根結點為數(shù)據(jù)庫,數(shù)據(jù)庫的子結點為關系,關系的子結點為元組。47允許多粒度樹中的每個結點被獨立地加鎖對一個結點加鎖意味著這個結點的所有后裔結點也被加以同樣類型的鎖在多粒度封鎖中一個數(shù)據(jù)對象可能以兩種方式封鎖:顯式封鎖和隱式封鎖顯式封鎖:直接加到數(shù)據(jù)對象上的封鎖隱式封鎖:由于其上級結點加鎖而使該數(shù)據(jù)對象加上了鎖顯式封鎖和隱式封鎖的效果是一樣的48該數(shù)據(jù)對象有無顯式封鎖與之沖突所有上級結點檢查本事務的顯式封鎖是否與該數(shù)據(jù)對象上的隱式封鎖沖突:(由上級結點封鎖造成的)所有下級結點看上面的顯式封鎖是否與本事務的隱式封鎖(將加到下級結點的封鎖)沖突。對某個數(shù)據(jù)對象加鎖時系統(tǒng)檢查的內(nèi)容498.7.2意向鎖引進意向鎖(intentionlock)目的提高對某個數(shù)據(jù)對象加鎖時系統(tǒng)的檢查效率對任一結點加基本鎖,必須先對它的上層結點加意向鎖;如果對一個結點加意向鎖,則說明該結點的下層結點正在被加鎖。例:對任一元組r加鎖,先關系R加意向鎖事務T要對關系R加X鎖,系統(tǒng)只要檢查根結點數(shù)據(jù)庫和關系R是否已加了不相容的鎖,不需要搜索和檢查R中的每一個元組是否加了X鎖50常用的意向鎖意向共享鎖(IntentShareLock,簡稱IS鎖)意向排它鎖(IntentExclusiveLock,簡稱IX鎖)共享意向排它鎖(ShareIntentExclusiveLock,簡稱SIX鎖)51IS鎖如果對一個數(shù)據(jù)對象加IS鎖,表示它的后裔結點
擬(意向)加S鎖。
例:要對某個元組加S鎖,則要首先對關系和數(shù)據(jù)庫加IS鎖。52IX鎖如果對一個數(shù)據(jù)對象加IX鎖,表示它的后裔結點擬(意向)加X鎖。例:要對某個元組加X鎖,則要首先對關系和數(shù)據(jù)庫加IX鎖。53SIX鎖如果對一個數(shù)據(jù)對象加SIX鎖,表示對它加S鎖,再加IX鎖,即SIX=S+IX。例:對某個表加SIX鎖,則表示該事務要讀整個表(所以要對該表加S鎖),同時會更新個別元組(所以要對該表加IX鎖)。54意向鎖的相容矩陣
T1T2SXISIXSIX-SYNYNNY
XNNNNNY
ISYNY
Y
Y
Y
IXNNY
YNY
SIXNNYNNY
-Y
Y
Y
Y
Y
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二手房交易合同范本
- 常見小區(qū)房屋裝修合同范本
- 工程設計勞務分包合同范本
- 農(nóng)產(chǎn)品期貨投資委托合同
- 課程設計 齒輪油泵
- 房屋買賣經(jīng)紀合同2024年
- 涉外貨物買賣合同范本
- 關于汽車抵押借款協(xié)議示例
- 2024農(nóng)村土地轉讓協(xié)議書范本
- 工程造價咨詢合同示例
- 電廠 2× 390MW9FA 燃氣-蒸汽聯(lián)合循環(huán)機組經(jīng)濟運行分析報告
- 閥門帶壓堵漏技術(李彪)
- 鈣離子增敏劑對心衰治療帶來的治療革命
- 《律師參與公司自行清算業(yè)務操作指引》
- 部編版《道德與法治》五年級下冊第8課《推翻帝制 民族覺醒》優(yōu)質(zhì)課件
- Q∕GDW 11514-2021 變電站智能機器人巡檢系統(tǒng)檢測規(guī)范
- 打印紙購銷合同(最新完整版)
- 布纜船操作規(guī)程
- 鴻業(yè)市政道路9.0實例教學視頻課程
- 德國有限責任公司章程GmbHSatzung
- 學生公寓宿管員周考核表
評論
0/150
提交評論