數(shù)據(jù)庫原理及應(yīng)用-并發(fā)控制_第1頁
數(shù)據(jù)庫原理及應(yīng)用-并發(fā)控制_第2頁
數(shù)據(jù)庫原理及應(yīng)用-并發(fā)控制_第3頁
數(shù)據(jù)庫原理及應(yīng)用-并發(fā)控制_第4頁
數(shù)據(jù)庫原理及應(yīng)用-并發(fā)控制_第5頁
已閱讀5頁,還剩49頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

并發(fā)控制本章主要內(nèi)容本章主要介紹數(shù)據(jù)庫并發(fā)操作帶來的數(shù)據(jù)不一致性問題、事務(wù)的概念及特性、活鎖和死鎖問題、數(shù)據(jù)庫系統(tǒng)的封鎖技術(shù)及封鎖協(xié)議、并發(fā)調(diào)度的可串行性與兩段鎖協(xié)議、封鎖粒度與多粒度封鎖等。為了充分利用數(shù)據(jù)庫資源,數(shù)據(jù)庫用戶對數(shù)據(jù)庫系統(tǒng)并行存取數(shù)據(jù),這樣就會發(fā)生多個用戶并發(fā)存取同一數(shù)據(jù)的情況,如果對并發(fā)操作不加控制,可能會產(chǎn)生不正確的數(shù)據(jù),破壞數(shù)據(jù)的完整性。因此,數(shù)據(jù)庫管理系統(tǒng)提供并發(fā)控制機(jī)制,保證數(shù)據(jù)庫的完整性和一致性。目錄01事務(wù)02并發(fā)控制03封鎖與封鎖協(xié)議04活鎖與死鎖05并發(fā)調(diào)度的可串行性與兩段鎖協(xié)議06封鎖粒度與多粒度封鎖07SQLServer的并發(fā)控制機(jī)制事務(wù)017.1.1事務(wù)的概念1.事務(wù)的概念定義7.1事務(wù)是數(shù)據(jù)庫應(yīng)用程序的基本邏輯單元,是用戶定義的一個數(shù)據(jù)庫操作序列,這些操作要么全做,要么不做,是一個不可分割的工作單位。一個事務(wù)可以是一組SQL語句、一條SQL語句或整個程序,一個應(yīng)用程序可以包括多個事務(wù)。定義事務(wù)的語句有三條:BEGINTRANSACTION(事務(wù)的開始)COMMIT(事務(wù)的提交)事務(wù)正常結(jié)束提交事務(wù)的所有操作(讀+更新)事務(wù)中所有對數(shù)據(jù)庫的更新寫回到磁盤上的物理數(shù)據(jù)庫中ROLLBACK(事務(wù)的回滾)事務(wù)異常終止事務(wù)運(yùn)行的過程中發(fā)生了故障,不能繼續(xù)執(zhí)行系統(tǒng)將事務(wù)中對數(shù)據(jù)庫的所有已完成的操作全部撤銷事務(wù)回滾到開始時的狀態(tài)7.1.1事務(wù)的概念7.1.1事務(wù)的概念【例7.1】定義一個“轉(zhuǎn)賬”事務(wù),該事務(wù)將5000元由賬號A轉(zhuǎn)至賬號B,但是賬號B最多不能超過30000元。用T-SQL定義該事務(wù)的操作序列如下:BEGINTRANSACTION

READ(A)

A=A-5000

IF(A<0)/*賬號A款項(xiàng)不足*/

ROLLBACK

ELSE

WRITE(A)

READ(B)

B=B+5000

IF(B>30000)/*賬號B款項(xiàng)超過30000元*/

ROLLBACK

ELSE WRITE(B)

COMMITENDTRANSACTION7.1.2事務(wù)的特性1.原子性事務(wù)是數(shù)據(jù)庫的邏輯工作單位,是不可分割的工作單元。事務(wù)中包含的所有操作要么全做,要么全不做,即不允許完成部分事務(wù)。2.一致性事務(wù)運(yùn)行的結(jié)果應(yīng)該使數(shù)據(jù)庫保持?jǐn)?shù)據(jù)的一致性,保持?jǐn)?shù)據(jù)一致性的前提是事務(wù)不能夠在執(zhí)行過程中被打斷,確保事務(wù)的全部操作被正確地執(zhí)行,如果其中某些操作無法正確執(zhí)行,就無法保證數(shù)據(jù)的一致性。7.1.2事務(wù)的特性3.隔離性系統(tǒng)必須保證事務(wù)不受其他并發(fā)執(zhí)行事務(wù)的影響,一個事務(wù)內(nèi)部的操作及使用的數(shù)據(jù),對其他并發(fā)事務(wù)應(yīng)該是隔離的,并發(fā)執(zhí)行的各個事務(wù)之間不能相互干擾。4.持久性一旦一個事務(wù)被提交,事務(wù)對數(shù)據(jù)的更改就被永久地寫入數(shù)據(jù)庫中,這個改變應(yīng)該是持久的,即使存放數(shù)據(jù)的介質(zhì)損壞了,系統(tǒng)也能將數(shù)據(jù)恢復(fù)到介質(zhì)損壞之前事務(wù)提交的狀態(tài)。并發(fā)控制02數(shù)據(jù)庫是一個可以供多個用戶共同使用的共享資源,在串行執(zhí)行的情況下,每個時刻只能有一個應(yīng)用程序?qū)?shù)據(jù)庫進(jìn)行存取,其他程序必須等待。這種工作方式制約了對數(shù)據(jù)庫的訪問效率,不利于數(shù)據(jù)庫資源的利用。解決這一問題的重要途徑是允許多個用戶并發(fā)地訪問數(shù)據(jù)庫。當(dāng)多個用戶并發(fā)地訪問數(shù)據(jù)庫時,就會產(chǎn)生多個事務(wù)同時存取同一數(shù)據(jù)的情況,若對并發(fā)操作不加以控制,就會造成對數(shù)據(jù)的錯誤存取,從而破壞數(shù)據(jù)庫的一致性。7.2并發(fā)控制7.2.1并發(fā)控制的含義并發(fā)控制是指當(dāng)多個用戶同時對數(shù)據(jù)庫進(jìn)行操作時,為了保護(hù)數(shù)據(jù)庫中數(shù)據(jù)的完整性和一致性而采用的各種技術(shù)。7.2.2并發(fā)操作帶來的問題1.丟失修改丟失修改是指事務(wù)T1和事務(wù)T2讀取同一數(shù)據(jù)并分別修改,事務(wù)T2提交的結(jié)果覆蓋了事務(wù)T1提交的結(jié)果,導(dǎo)致事務(wù)T1對數(shù)據(jù)的修改被丟失。7.2.2并發(fā)操作帶來的問題2.讀臟數(shù)據(jù)讀臟數(shù)據(jù)又稱為污讀,是指事務(wù)T1修改某一數(shù)據(jù)并將其寫回磁盤,事務(wù)T2讀取同一數(shù)據(jù)后,事務(wù)T1由于某種原因被撤銷,被事務(wù)T1修改過的數(shù)據(jù)會恢復(fù)原值,于是事務(wù)T2讀到的數(shù)據(jù)就與數(shù)據(jù)庫中的數(shù)據(jù)不一致,事務(wù)T2讀到的數(shù)據(jù)就成為臟數(shù)據(jù),是不正確的數(shù)據(jù)。7.2.2并發(fā)操作帶來的問題3.不可重復(fù)讀不可重復(fù)讀是指事務(wù)T1讀取數(shù)據(jù)R后,事務(wù)T2讀取并更新了數(shù)據(jù)R,當(dāng)事務(wù)T1再次讀取數(shù)據(jù)R時,事務(wù)T1無法再現(xiàn)前一次的讀取結(jié)果。封鎖與封鎖協(xié)議037.3封鎖與封鎖協(xié)議實(shí)現(xiàn)并發(fā)控制的主要技術(shù)是封鎖。封鎖是指當(dāng)一個事務(wù)在對某個數(shù)據(jù)對象(可以是數(shù)據(jù)項(xiàng)、記錄、數(shù)據(jù)集以及整個數(shù)據(jù)庫)進(jìn)行操作之前,必須先獲得相應(yīng)的鎖,以保證數(shù)據(jù)操作的正確性和一致性。7.3.1封鎖類型基本的封鎖類型有兩種:排他鎖和共享鎖。排他鎖(簡記為X鎖)又稱為寫鎖。如果事務(wù)T對數(shù)據(jù)對象R加上X鎖,則只允許事務(wù)T讀取和修改數(shù)據(jù)對象R,其他任何事務(wù)都不能再對數(shù)據(jù)對象R加任何類型的鎖,直到事務(wù)T釋放數(shù)據(jù)對象R上的鎖。這樣就保證了其他事務(wù)在事務(wù)T釋放數(shù)據(jù)對象R上的鎖之前,不能再讀取和修改數(shù)據(jù)對象R。7.3.1封鎖類型共享鎖(簡記為S鎖)又稱為讀鎖。如果事務(wù)T對數(shù)據(jù)對象R加上S鎖,則事務(wù)T可以讀數(shù)據(jù)對象R,但不可以修改數(shù)據(jù)對象R,其他事務(wù)只能對數(shù)據(jù)對象R再加S鎖,不能再加X鎖,直到事務(wù)T釋放數(shù)據(jù)對象R上的S鎖。這樣就保證了其他事務(wù)可以讀取數(shù)據(jù)對象R,但是在事務(wù)T釋放數(shù)據(jù)對象R上的S鎖之前,不能對數(shù)據(jù)對象R做任何修改。7.3.2封鎖協(xié)議當(dāng)一個事務(wù)T要對某個數(shù)據(jù)對象加鎖時,還必須遵守某種規(guī)則。例如,何時開始封鎖、封鎖多長時間、何時釋放鎖等,這些規(guī)則稱為封鎖協(xié)議。對封鎖方式規(guī)定不同的規(guī)則,就形成了不同的封鎖協(xié)議。針對并發(fā)操作可能帶來的3類數(shù)據(jù)不一致問題,可以通過3類封鎖協(xié)議在不同程度上予以解決。7.3.2封鎖協(xié)議1.一級封鎖協(xié)議一級封鎖協(xié)議是指事務(wù)T在修改數(shù)據(jù)對象R之前,必須先對數(shù)據(jù)對象R申請加X鎖,在獲得X鎖后,該事務(wù)才能繼續(xù)執(zhí)行,事務(wù)T結(jié)束后才釋放所加的X鎖。如果沒有獲準(zhǔn)加X鎖,則事務(wù)T進(jìn)入等待狀態(tài),直到獲得X鎖。一級封鎖協(xié)議可以防止丟失修改。7.3.2封鎖協(xié)議表7.4中,由于事務(wù)T1先對數(shù)據(jù)對象R加了X鎖,事務(wù)T2只能等待事務(wù)T1釋放數(shù)據(jù)對象R上的X鎖,只有獲得了X鎖后,才能對數(shù)據(jù)對象R加X鎖進(jìn)行修改。這樣,事務(wù)T1對數(shù)據(jù)的修改值70就不會因事務(wù)T2對數(shù)據(jù)對象R的修改而丟失了。7.3.2封鎖協(xié)議2.二級封鎖協(xié)議二級封鎖協(xié)議是在一級封鎖協(xié)議的基礎(chǔ)上,再加上事務(wù)T在讀取數(shù)據(jù)對象R之前必須對數(shù)據(jù)對象R申請加S鎖,在獲得了S鎖并讀完數(shù)據(jù)對象R后立即釋放所加的S鎖。如果未獲準(zhǔn)加S鎖,則該事務(wù)進(jìn)入等待狀態(tài),直到獲準(zhǔn)加S鎖后,該事務(wù)才繼續(xù)執(zhí)行。二級封鎖協(xié)議不僅可以防止丟失修改,而且可以防止讀臟數(shù)據(jù)。7.3.2封鎖協(xié)議表7.5中,事務(wù)T1要對數(shù)據(jù)庫中數(shù)據(jù)對象R的值進(jìn)行修改,因此先對數(shù)據(jù)對象R加上X鎖。在t2時刻,事務(wù)T2想讀取數(shù)據(jù)對象R的值,由于遵循二級封鎖協(xié)議,需要先對數(shù)據(jù)對象R加S鎖,因?yàn)閿?shù)據(jù)對象R上有事務(wù)T1的X鎖,所以事務(wù)T2只能等待事務(wù)T1結(jié)束后才能讀取到數(shù)據(jù)對象R。當(dāng)事務(wù)T1釋放了加在數(shù)據(jù)對象R上的X鎖后,事務(wù)T2讀到的數(shù)據(jù)就是事務(wù)T1回滾以后的正確數(shù)據(jù)了。7.3.2封鎖協(xié)議3.三級封鎖協(xié)議三級封鎖協(xié)議是在一級封鎖協(xié)議的基礎(chǔ)上,再加上事務(wù)T在讀數(shù)據(jù)對象R之前必須先對數(shù)據(jù)對象R申請加S鎖,在獲得了S鎖后,直到該事務(wù)T結(jié)束才釋放所加的S鎖。如果未獲準(zhǔn)加S鎖,則該事務(wù)T進(jìn)入等待狀態(tài),直到獲準(zhǔn)加S鎖,該事務(wù)才繼續(xù)執(zhí)行。由于三級封鎖協(xié)議中的S鎖直到事務(wù)結(jié)束時才釋放,因此三級鎖協(xié)議中的S鎖不僅可以防止丟失修改和讀臟數(shù)據(jù),還可以防止不可重復(fù)讀。7.3.2封鎖協(xié)議表7.6中,事務(wù)T1要讀取數(shù)據(jù)庫中數(shù)據(jù)對象R的值,于是先對數(shù)據(jù)對象R加上S鎖,讀取到了數(shù)據(jù)對象R的值為100,讀完不釋放鎖。在t2時刻,事務(wù)T2要對數(shù)據(jù)對象R加X鎖進(jìn)行修改,由于數(shù)據(jù)對象R上有事務(wù)T1加的S鎖,事務(wù)T2只能等待。在t3時刻,事務(wù)T1再次讀取數(shù)據(jù)對象R的值,與上一次讀取到的一致。在事務(wù)T1正常結(jié)束釋放了S鎖后,事務(wù)T2才能對數(shù)據(jù)對象R進(jìn)行修改,這樣就避免了事務(wù)T1不可重復(fù)讀的問題?;铈i與死鎖047.4.1活鎖在并發(fā)事務(wù)處理過程中,如果事務(wù)T1已在數(shù)據(jù)對象R上加鎖,事務(wù)T2又請求為數(shù)據(jù)對象R加鎖,那么事務(wù)T2進(jìn)入了等待狀態(tài),接著事務(wù)T3也請求為數(shù)據(jù)對象R加鎖,當(dāng)事務(wù)T1釋放了數(shù)據(jù)對象R上的鎖之后,系統(tǒng)首先響應(yīng)了事務(wù)T3的請求,允許事務(wù)T3對數(shù)據(jù)對象R加鎖,此時事務(wù)T2仍然等待,之后事務(wù)T4又請求封鎖數(shù)據(jù)對象R,當(dāng)事務(wù)T3釋放了數(shù)據(jù)對象R的封鎖之后,系統(tǒng)又響應(yīng)了事務(wù)T4的請求……事務(wù)T2則有可能永遠(yuǎn)等待而無法執(zhí)行,這就是活鎖的情況。7.4.1活鎖避免活鎖的簡單方法是采用先來先服務(wù)的策略,按照請求封鎖的次序?qū)κ聞?wù)排隊(duì),一旦數(shù)據(jù)對象上的鎖被釋放,就使申請隊(duì)列中的第一個事務(wù)獲得鎖。7.4.2死鎖事務(wù)T1對數(shù)據(jù)對象R1加了鎖,事務(wù)T2對數(shù)據(jù)對象R2加了鎖,之后,事務(wù)T1又申請對數(shù)據(jù)對象R2加鎖,因?yàn)槭聞?wù)T2已經(jīng)對數(shù)據(jù)對象R2加鎖,所以事務(wù)T1必須等待事務(wù)T2釋放數(shù)據(jù)對象R2上的鎖。接著,事務(wù)T2又申請對數(shù)據(jù)對象R1加鎖,因?yàn)槭聞?wù)T1已經(jīng)封鎖了數(shù)據(jù)對象R1,事務(wù)T2也必須等待事務(wù)T1釋放數(shù)據(jù)對象R1上的鎖,這樣就出現(xiàn)了事務(wù)T1和事務(wù)T2永遠(yuǎn)處于相互等待狀態(tài),始終無法結(jié)束,這樣的情況被稱為死鎖。7.4.2死鎖1.死鎖的預(yù)防死鎖預(yù)防機(jī)制的思想是:避免并發(fā)事務(wù)互相等待其他事務(wù)釋放封鎖的情況出現(xiàn),保證數(shù)據(jù)庫系統(tǒng)永不進(jìn)入死鎖狀態(tài)。預(yù)防死鎖主要有一次封鎖法和順序加鎖法兩種。(1)一次封鎖法一次封鎖法要求每個事務(wù)開始執(zhí)行之前,一次性將所有要用的數(shù)據(jù)對象全部加鎖,否則事務(wù)就不能繼續(xù)執(zhí)行。7.4.2死鎖(2)順序加鎖法預(yù)先對所有數(shù)據(jù)對象規(guī)定一個加鎖順序,所有的事務(wù)都按這個順序進(jìn)行加鎖,在釋放時按逆序進(jìn)行。順序加鎖法可以有效地防止死鎖,但是也存在一些問題。數(shù)據(jù)庫系統(tǒng)中可封鎖的數(shù)據(jù)對象很多,并且隨著數(shù)據(jù)的插入、刪除等操作而動態(tài)變化,要維護(hù)這些資源的封鎖順序非常困難,系統(tǒng)維護(hù)的成本很高。7.4.2死鎖2.死鎖的檢測與解除在數(shù)據(jù)庫系統(tǒng)中,診斷死鎖一般使用超時法和事務(wù)等待圖法。(1)超時法當(dāng)一個事務(wù)等待加鎖的時間超過了規(guī)定的時限,就被認(rèn)為發(fā)生了死鎖。超時法實(shí)現(xiàn)簡單,但是設(shè)置判斷死鎖的時限是非常困難的,如果設(shè)置的時限太長,那么發(fā)生死鎖以后不能及時發(fā)現(xiàn);如果設(shè)置的時限太短,那么由于其他原因?qū)е碌氖聞?wù)等待超時也會被誤認(rèn)為發(fā)生了死鎖。7.4.2死鎖(2)事務(wù)等待圖法事務(wù)等待圖是一個有向圖G=(T,E),T為節(jié)點(diǎn)的集合,每個節(jié)點(diǎn)表示正在運(yùn)行的事務(wù),E為邊的集合,每條有向邊表示事務(wù)等待的情況。若事務(wù)T1等待事務(wù)T2,則在T1和T2之間畫一條有向邊,由T1指向T2。事務(wù)等待圖動態(tài)地反映了所有事務(wù)的等待情況,并發(fā)控制子系統(tǒng)周期性地檢測事務(wù)等待圖,若發(fā)現(xiàn)圖中存在回路,則表示系統(tǒng)中出現(xiàn)了死鎖。圖7.1中,事務(wù)T1等待事務(wù)T2,事務(wù)T2等待事務(wù)T1,這就產(chǎn)生了死鎖。解決方法:數(shù)據(jù)庫系統(tǒng)選擇一個處理死鎖代價最小的事務(wù),將其撤銷,釋放此事務(wù)持有的所有鎖,使需要這些數(shù)據(jù)對象的其他事務(wù)可以繼續(xù)運(yùn)行下去;然后,對撤銷的事務(wù)進(jìn)行回滾操作,即對它所執(zhí)行的數(shù)據(jù)修改操作進(jìn)行恢復(fù)處理。并發(fā)調(diào)度的可串行性與兩段鎖協(xié)議057.5并發(fā)調(diào)度的可串行性與兩段鎖協(xié)議數(shù)據(jù)庫系統(tǒng)對并發(fā)事務(wù)的執(zhí)行次序是隨機(jī)的,不同的執(zhí)行次序可能會產(chǎn)生不同的運(yùn)行結(jié)果。通常情況下,如果一個事務(wù)在執(zhí)行過程中沒有與其他事務(wù)并發(fā)運(yùn)行,那么該事務(wù)的執(zhí)行就不會受到其他事務(wù)的干擾,運(yùn)行結(jié)果就是正常的或者是預(yù)想的。當(dāng)多個事務(wù)串行執(zhí)行時,事務(wù)的運(yùn)行結(jié)果一定是正確的。7.5.1并發(fā)調(diào)度的可串行性定義7.2調(diào)度(Schedule)是指事務(wù)的執(zhí)行次序。如果多個事務(wù)依次執(zhí)行,則稱為事務(wù)的串行調(diào)度。如果多個事務(wù)同時執(zhí)行,則稱為事務(wù)的并發(fā)調(diào)度。定義7.3如果多個事務(wù)的并發(fā)運(yùn)行結(jié)果與按某一次序串行地執(zhí)行這些事務(wù)時結(jié)果相同,稱這種調(diào)度策略為可串行性(Serializable)調(diào)度,否則,是不可串行性的調(diào)度??纱行允遣l(fā)事務(wù)正確性的判別準(zhǔn)則,按照這個準(zhǔn)則的規(guī)定,一個給定的并發(fā)調(diào)度,當(dāng)且僅當(dāng)它是可串行性時,才認(rèn)為是正確的調(diào)度。7.5.1并發(fā)調(diào)度的可串行性表7.7中,A和B的初始值都是50,按串行調(diào)度(一)的執(zhí)行順序調(diào)度事務(wù)T1和T2,A=52,B=51。按串行調(diào)度(二)的執(zhí)行順序調(diào)度事務(wù)T1和T2,A=51,B=52。兩種調(diào)度的結(jié)果雖然不同,但由于它們是串行調(diào)度的,因此都是正確的調(diào)度。7.5.1并發(fā)調(diào)度的可串行性表7.8的左側(cè)兩欄中,兩個事務(wù)是交錯執(zhí)行的,執(zhí)行的結(jié)果是A=51,B=51,由于這個結(jié)果與按串行調(diào)度的兩種執(zhí)行結(jié)果都不同,因此是錯誤的調(diào)度;表7.8的右側(cè)兩欄中,兩個事務(wù)也是交錯執(zhí)行的,其執(zhí)行結(jié)果是A=52,B=51,這與表7.7中串行調(diào)度(一)的執(zhí)行結(jié)果相同,因此是正確的調(diào)度。7.5.2兩段鎖協(xié)議為保證并發(fā)操作的正確性,數(shù)據(jù)庫管理系統(tǒng)的并發(fā)控制機(jī)制普遍采用加鎖方法實(shí)現(xiàn)并發(fā)操作調(diào)度的可串行性,從而保證調(diào)度的正確性。保證并發(fā)調(diào)度可串行性的封鎖協(xié)議是兩段鎖協(xié)議。兩段鎖協(xié)議規(guī)定所有的事務(wù)應(yīng)遵守如下規(guī)定:(1)在對任何一個數(shù)據(jù)對象進(jìn)行讀寫操作之前,事務(wù)必須申請對該數(shù)據(jù)對象進(jìn)行封鎖;(2)在釋放某個鎖之后,事務(wù)不能再對任何數(shù)據(jù)對象加鎖。7.5.2兩段鎖協(xié)議兩段鎖協(xié)議要求所有事務(wù)必須分兩個階段對數(shù)據(jù)對象加鎖和解鎖。第一階段是加鎖階段,也稱擴(kuò)展階段。在這一階段中,事務(wù)可以申請獲得任何數(shù)據(jù)對象上的任何類型的鎖,但是不能釋放任何鎖。第二段是解鎖階段,也稱收縮階段。在這一階段中,事務(wù)可以釋放任何數(shù)據(jù)對象上的任何類型的鎖,但不能再申請任何鎖。7.5.2兩段鎖協(xié)議【例7.2】有如下兩個事務(wù)的封鎖序列。事務(wù)T1的封鎖序列如下所示,釋放鎖在所有加鎖之后,因此它遵守兩段鎖協(xié)議。XLOCK(A)→SLOCK(B)→XLOCK(C)→UNLOCK(B)→UNLOCK(A)→UNLOCK(C)事務(wù)T2的封鎖序列如下所示,在釋放B上的鎖后,又申請對C加鎖,因此它不遵守兩段鎖協(xié)議。XLOCK(A)→SLOCK(B)→UNLOCK(B)→SLOCK(C)→UNLOCK(A)→UNLOCK(C)7.5.2兩段鎖協(xié)議【例7.3】采用兩段鎖協(xié)議保證了事務(wù)T1和T2為可串行性調(diào)度。由于遵守兩段鎖協(xié)議,事務(wù)T1在成功獲得全部數(shù)據(jù)對象A和B并使用完畢后,才會釋放鎖,并且不再申請加鎖。事務(wù)T1在處理完數(shù)據(jù)對象A和數(shù)據(jù)對象B后,事務(wù)T2才能執(zhí)行對數(shù)據(jù)對象A和數(shù)據(jù)對象B的操作,顯然這個調(diào)度是一個可串行性調(diào)度,也能夠成為正確的調(diào)度。7.5.2兩段鎖協(xié)議兩段鎖協(xié)議是并發(fā)調(diào)度可串行性的充分條件,但不是必要條件。若并發(fā)事務(wù)的調(diào)度遵守兩段鎖協(xié)議,那么這個調(diào)度一定是可串行性調(diào)度;若并發(fā)事務(wù)的調(diào)度并不遵守兩段鎖協(xié)議,也有可能是可串行性調(diào)度。兩段鎖協(xié)議和防止死鎖的一次封鎖法有類似之處,一次封鎖法要求每個事務(wù)必須一次性將所有要使用的數(shù)據(jù)對象全部加鎖,否則就不能繼續(xù)執(zhí)行,因此一次封鎖法遵守兩段鎖協(xié)議,但兩段鎖協(xié)議并不要求事務(wù)必須一次性將所有要用到的數(shù)據(jù)對象全部加鎖,因此,遵守兩段鎖協(xié)議的事務(wù)也可能發(fā)生死鎖。封鎖粒度與多粒度封鎖067.6封鎖粒度與多粒度封鎖根據(jù)對數(shù)據(jù)的不同處理,封鎖對象可以是邏輯單元,也可以是物理單元。以關(guān)系數(shù)據(jù)庫系統(tǒng)為例,封鎖對象可以是數(shù)據(jù)庫、索引、關(guān)系、元組、屬性值等邏輯單元,也可以是頁(數(shù)據(jù)頁或索引頁)、塊等物理單元。1.封鎖粒度排他鎖和共享鎖都是加在數(shù)據(jù)庫中的數(shù)據(jù)對象上的,封鎖對象的大小稱為封鎖粒度(granularity)。7.6封鎖粒度與多粒度封鎖2.多粒度封鎖如果在同一個數(shù)據(jù)庫系統(tǒng)中,同時支持多種封鎖粒度供不同的事務(wù)選擇,則稱為多粒度封鎖。選擇封鎖粒度時應(yīng)該根據(jù)并發(fā)度和封鎖開銷兩個因素,選擇適當(dāng)?shù)姆怄i粒度,以求得最優(yōu)的效果。通常情況下,需要處理多個關(guān)系的事務(wù),可以以數(shù)據(jù)庫為封鎖單位;需要處理某個關(guān)系的大量元組的事務(wù),可以以關(guān)系為封鎖粒度;只處理少量元組的事務(wù),可以以元組為封鎖單位。SQLServer的并發(fā)控制機(jī)制077.7SQLServer的并發(fā)控制機(jī)制SQLServer通過支持事務(wù)機(jī)制來管理多個事務(wù),保證數(shù)據(jù)的一致性,并使用事務(wù)日志保證修改的完整性和可恢復(fù)性。SQLServer遵從三級封鎖協(xié)議,從而可以有效地控制并發(fā)操作可能產(chǎn)生的丟失修改、不可重復(fù)讀、讀臟數(shù)據(jù)等問題。SQLServer具有多種不同粒度的鎖,允許事務(wù)鎖定不同的資源,并能自動使用與任務(wù)相對應(yīng)的等級鎖來鎖定資源對象,以使鎖的成本最小化。7.7.1SQLServer的事務(wù)SQLServer的事務(wù)分兩種類型:系統(tǒng)提供的事務(wù)和用戶定義的事務(wù)。系統(tǒng)提供的事務(wù)是指在執(zhí)行某些語句時,一條語句就是一個事務(wù),它的數(shù)據(jù)對象可能是一個或多個表(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論