計(jì)算機(jī)軟件及應(yīng)用并發(fā)控制PPT課件_第1頁(yè)
計(jì)算機(jī)軟件及應(yīng)用并發(fā)控制PPT課件_第2頁(yè)
計(jì)算機(jī)軟件及應(yīng)用并發(fā)控制PPT課件_第3頁(yè)
計(jì)算機(jī)軟件及應(yīng)用并發(fā)控制PPT課件_第4頁(yè)
計(jì)算機(jī)軟件及應(yīng)用并發(fā)控制PPT課件_第5頁(yè)
已閱讀5頁(yè),還剩71頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、并發(fā)執(zhí)行交叉并發(fā)方式(Interleaved Concurrency) 在單處理機(jī)系統(tǒng)中,事務(wù)的并行執(zhí)行是這些并行事務(wù)的操作輪流交叉運(yùn)行 單處理機(jī)系統(tǒng)中的并行事務(wù)并沒有真正地并行運(yùn)行,但能夠減少處理機(jī)的空閑時(shí)間,提高系統(tǒng)的效率第1頁(yè)/共76頁(yè)并發(fā)執(zhí)行事務(wù)的交叉并發(fā)執(zhí)行方式第2頁(yè)/共76頁(yè) 并發(fā)執(zhí)行 并發(fā)執(zhí)行通常比起串行執(zhí)行有更高的效率。 每個(gè)時(shí)刻只有一個(gè)事務(wù)運(yùn)行,其他事務(wù)必須等到這個(gè)事務(wù)結(jié)束以后方能運(yùn)行,效率低; 不能充分利用系統(tǒng)資源,發(fā)揮數(shù)據(jù)庫(kù)共享資源的特點(diǎn);T1T2T3事務(wù)的串行執(zhí)行方式第3頁(yè)/共76頁(yè)并發(fā)執(zhí)行帶來的問題 事務(wù)并發(fā)執(zhí)行帶來的問題n會(huì)產(chǎn)生多個(gè)事務(wù)同時(shí)存取同一數(shù)據(jù)的情況 n可能

2、會(huì)存取和存儲(chǔ)不正確的數(shù)據(jù),破壞事務(wù)一致性和數(shù)據(jù)庫(kù)的一致性 DBMS必須提供并發(fā)控制機(jī)制 并發(fā)控制機(jī)制是衡量一個(gè)DBMS性能的重要標(biāo)志之一第4頁(yè)/共76頁(yè)T1的修改被T2覆蓋了!觀察并發(fā)操作帶來數(shù)據(jù)的不一致性實(shí)例例1飛機(jī)訂票系統(tǒng)中的一個(gè)活動(dòng)序列 甲售票點(diǎn)(甲事務(wù))讀出某航班的機(jī)票余額A,設(shè)A=16; 乙售票點(diǎn)(乙事務(wù))讀出同一航班的機(jī)票余額A,也為16; 甲售票點(diǎn)賣出一張機(jī)票,修改余額AA-1,所以A為15,把A寫回?cái)?shù)據(jù)庫(kù); 乙售票點(diǎn)也賣出一張機(jī)票,修改余額AA-1,所以A為15,把A寫回?cái)?shù)據(jù)庫(kù) n結(jié)果明明賣出兩張機(jī)票,數(shù)據(jù)庫(kù)中機(jī)票余額只減少1 第5頁(yè)/共76頁(yè)問題觀察 這種情況稱為數(shù)據(jù)庫(kù)的不一

3、致性,是由并發(fā)操作引起的。 在并發(fā)操作情況下,對(duì)甲、乙兩個(gè)事務(wù)的操作序列的調(diào)度是隨機(jī)的。 若按上面的調(diào)度序列執(zhí)行,甲事務(wù)的修改就被丟失。 原因:第4步中乙事務(wù)修改A并寫回后覆蓋了甲事務(wù)的修改第6頁(yè)/共76頁(yè)問題觀察事務(wù)甲(T1)取A=15修改A=A-1寫回?cái)?shù)據(jù)庫(kù)A=14事務(wù)乙T2取A=15修改A=A-1寫回?cái)?shù)據(jù)庫(kù)A=14T第7頁(yè)/共76頁(yè)問題觀察:多種形式的不一致性 并發(fā)操作帶來的數(shù)據(jù)不一致性 丟失修改(Lost Update) 不可重復(fù)讀(Non-repeatable Read) 讀“臟”數(shù)據(jù)(Dirty Read) 記號(hào) R(x):讀數(shù)據(jù)x W(x):寫數(shù)據(jù)x 第8頁(yè)/共76頁(yè)1 丟失修改

4、 兩個(gè)事務(wù)T1和T2讀入同一數(shù)據(jù)并修改,T2的提交結(jié)果破壞了T1提交的結(jié)果,導(dǎo)致T1的修改被丟失。第9頁(yè)/共76頁(yè)丟失修改(續(xù))T1T2 R(A)=16R(A)=16 AA-1W(A)=15AA-1W(A)=15丟失修改第10頁(yè)/共76頁(yè)2. 不可重復(fù)讀 不可重復(fù)讀是指事務(wù)T1讀取數(shù)據(jù)后,事務(wù)T2 執(zhí)行更新操作,使T1無法再現(xiàn)前一次讀取結(jié)果。第11頁(yè)/共76頁(yè)不可重復(fù)讀(續(xù)) 不可重復(fù)讀包括三種情況:(1)事務(wù)T1讀取某一數(shù)據(jù)后,事務(wù)T2對(duì)其做了修改,當(dāng)事務(wù)T1再次讀該數(shù)據(jù)時(shí),得到與前一次不同的值 第12頁(yè)/共76頁(yè)不可重復(fù)讀(續(xù))nT1讀取B=100進(jìn)行運(yùn)算nT2讀取同一數(shù)據(jù)B,對(duì)其進(jìn)行修改

5、后將B=200寫回?cái)?shù)據(jù)庫(kù)。nT1為了對(duì)讀取值校對(duì)重讀B,B已為200,與第一次讀取值不一致 T1T2 R(A)=50 R(B)=100求和=150R(B)=100BB*2(B)=200 R(A)=50R(B)=200和=250(驗(yàn)算不對(duì))不可重復(fù)讀 例如:第13頁(yè)/共76頁(yè)不可重復(fù)讀(續(xù))(2)事務(wù)T1按一定條件從數(shù)據(jù)庫(kù)中讀取了某些數(shù)據(jù)記錄后,事務(wù)T2刪除了其中部分記錄,當(dāng)T1再次按相同條件讀取數(shù)據(jù)時(shí),發(fā)現(xiàn)某些記錄神秘地消失了 (3)事務(wù)T1按一定條件從數(shù)據(jù)庫(kù)中讀取某些數(shù)據(jù)記錄后,事務(wù)T2插入了一些記錄,當(dāng)T1再次按相同條件讀取數(shù)據(jù)時(shí),發(fā)現(xiàn)多了一些記錄。 后兩種不可重復(fù)讀有時(shí)也稱為幻影現(xiàn)象(P

6、hantom Row)第14頁(yè)/共76頁(yè)3. 讀“臟”數(shù)據(jù) 讀“臟”數(shù)據(jù)是指:n事務(wù)T1修改某一數(shù)據(jù),并將其寫回磁盤(工作區(qū))n事務(wù)T2讀取同一數(shù)據(jù)后,T1由于某種原因被撤銷n這時(shí)T1已修改過的數(shù)據(jù)恢復(fù)原值,T2讀到的數(shù)據(jù)就與數(shù)據(jù)庫(kù)中的數(shù)據(jù)不一致nT2讀到的數(shù)據(jù)就為“臟”數(shù)據(jù),即不正確的數(shù)據(jù) 第15頁(yè)/共76頁(yè)讀“臟”數(shù)據(jù)(續(xù))T1T2 R(C)=100CC*2W(C)=200R(C)=200ROLLBACK C恢復(fù)為100例如例如讀“臟”數(shù)據(jù) n T1將C值修改為200,T2讀到C為200n T1由于某種原因撤銷,其修改作廢,C恢復(fù)原值100n 這時(shí)T2讀到的C為200,與數(shù)據(jù)庫(kù)內(nèi)容不一致,

7、就是“臟”數(shù)據(jù) 第16頁(yè)/共76頁(yè)總結(jié)一下 并發(fā)操作會(huì)破壞數(shù)據(jù)不一致性 并發(fā)控制就是要用正確的方式調(diào)度并發(fā)操作,使一個(gè)用戶事務(wù)的執(zhí)行不受其他事務(wù)的干擾,從而避免造成數(shù)據(jù)的不一致性 對(duì)數(shù)據(jù)庫(kù)的應(yīng)用有時(shí)允許某些不一致性,例如有些統(tǒng)計(jì)工作涉及數(shù)據(jù)量很大,讀到一些“臟”數(shù)據(jù)對(duì)統(tǒng)計(jì)精度沒什么影響,可以降低對(duì)一致性的要求以減少系統(tǒng)開銷 第17頁(yè)/共76頁(yè)引導(dǎo)學(xué)生分析問題、定義問題 DBMS對(duì)并發(fā)事務(wù)不同的調(diào)度可能會(huì)產(chǎn)生不同的結(jié)果。 那么什么是正確性的標(biāo)準(zhǔn)呢? 直觀上:串行調(diào)度是正確的! 執(zhí)行結(jié)果等價(jià)于串行調(diào)度的調(diào)度也是正確的,稱為可串行化調(diào)度 第18頁(yè)/共76頁(yè)錯(cuò)誤出現(xiàn)的原因 產(chǎn)生這些錯(cuò)誤的主要原因是由于

8、違反了事務(wù)ACID中的四項(xiàng)原則,特別是隔離性原則。為保證事務(wù)并發(fā)執(zhí)行的正確,必須要有一定的調(diào)度手段以保障事務(wù)并發(fā)執(zhí)行中一事務(wù)執(zhí)行時(shí)不受其他事務(wù)的影響。并發(fā)控制就是要用正確的方式調(diào)度并發(fā)操作,使一個(gè)用戶事務(wù)的執(zhí)行不受其他事務(wù)的干擾,從而避免造成數(shù)據(jù)的不一致性。第19頁(yè)/共76頁(yè)如何設(shè)計(jì)并發(fā)控制機(jī)制 并發(fā)控制的主要技術(shù) 封鎖(Locking) 時(shí)間戳(Timestamp) 樂觀控制法 商用的DBMS一般都采用封鎖方法 第20頁(yè)/共76頁(yè)什么是封鎖 封鎖就是事務(wù)T在對(duì)某個(gè)數(shù)據(jù)對(duì)象(例如表、記錄等)操作之前,先向系統(tǒng)發(fā)出請(qǐng)求,對(duì)其加鎖 加鎖后事務(wù)T就對(duì)該數(shù)據(jù)對(duì)象有了一定的控制,在事務(wù)T釋放它的鎖之前,

9、其它的事務(wù)不能更新此數(shù)據(jù)對(duì)象。 封鎖是實(shí)現(xiàn)并發(fā)控制的一個(gè)非常重要的技術(shù)第21頁(yè)/共76頁(yè)基本封鎖類型 一個(gè)事務(wù)對(duì)某個(gè)數(shù)據(jù)對(duì)象加鎖后究竟擁有什么樣的控制由封鎖的類型決定。 基本封鎖類型 排它鎖(Exclusive Locks,簡(jiǎn)記為X鎖) 共享鎖(Share Locks,簡(jiǎn)記為S鎖)第22頁(yè)/共76頁(yè)排它鎖 排它鎖又稱為寫鎖 若事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加上X鎖,則只允許T讀取和修改A,其它任何事務(wù)都不能再對(duì)A加任何類型的鎖,直到T釋放A上的鎖 保證其他事務(wù)在T釋放A上的鎖之前不能再讀取和修改A 第23頁(yè)/共76頁(yè)共享鎖 共享鎖又稱為讀鎖 若事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加上S鎖,則其它事務(wù)只能再對(duì)A加S鎖,而不能

10、加X鎖,直到T釋放A上的S鎖 保證其他事務(wù)可以讀A,但在T釋放A上的S鎖之前不能對(duì)A做任何修改 第24頁(yè)/共76頁(yè)鎖的相容矩陣Y=Yes,相容的請(qǐng)求N=No,不相容的請(qǐng)求 T1 T2XS-XNNYSNYY-YYY第25頁(yè)/共76頁(yè)鎖的相容矩陣(續(xù))在鎖的相容矩陣中: 最左邊一列表示事務(wù)T1已經(jīng)獲得的數(shù)據(jù)對(duì)象上的鎖的類型,其中橫線表示沒有加鎖。 最上面一行表示另一事務(wù)T2對(duì)同一數(shù)據(jù)對(duì)象發(fā)出的封鎖請(qǐng)求。 T2的封鎖請(qǐng)求能否被滿足用矩陣中的Y和N表示 Y表示事務(wù)T2的封鎖要求與T1已持有的鎖相容,封鎖請(qǐng)求可以滿足 N表示T2的封鎖請(qǐng)求與T1已持有的鎖沖突,T2的請(qǐng)求被拒絕第26頁(yè)/共76頁(yè)使用封鎖機(jī)

11、制解決丟失修改問題T1T2 Xlock A R(A)=16Xlock A AA-1等待W(A)=15等待Commit等待Unlock A等待獲得Xlock AR(A)=15AA-1W(A)=14CommitUnlock A例:例:n 事務(wù)T1在讀A進(jìn)行修改之前先對(duì)A加X鎖n 當(dāng)T2再請(qǐng)求對(duì)A加X鎖時(shí)被拒絕n T2只能等待T1釋放A上的鎖后T2獲得對(duì)A的X鎖n 這時(shí)T2讀到的A已經(jīng)是T1更新過的值15n T2按此新的A值進(jìn)行運(yùn)算,并將結(jié)果值A(chǔ)=14送回到磁盤。避免了丟失T1的更新。沒有丟失修改沒有丟失修改第27頁(yè)/共76頁(yè)使用封鎖機(jī)制解決不可重復(fù)讀問題T1T2 Slock ASlock BR(A

12、)=50R(B)=100求和=150Xlock B等待等待 R(A)=50等待R(B)=100等待求和=150等待Commit等待Unlock A等待Unlock B等待獲得XlockBR(B)=100BB*2n 事務(wù)T1在讀A,B之前,先對(duì)A,B加S鎖n 其他事務(wù)只能再對(duì)A,B加S鎖,而不能加X鎖,即其他事務(wù)只能讀A,B,而不能修改n 當(dāng)T2為修改B而申請(qǐng)對(duì)B的X鎖時(shí)被拒絕只能等待T1釋放B上的鎖n T1為驗(yàn)算再讀A,B,這時(shí)讀出的B仍是100,求和結(jié)果仍為150,即可重復(fù)讀n T1結(jié)束才釋放A,B上的S鎖。T2才獲得對(duì)B的X鎖 可重復(fù)讀可重復(fù)讀第28頁(yè)/共76頁(yè)使用封鎖機(jī)制解決讀“臟”數(shù)據(jù)

13、問題T1T2Xlock CR(C)=100CC*2W(C)=200Slock C等待ROLLBACK等待(C恢復(fù)為100)等待Unlock C等待獲得Slock CR(C)=100Commit CUnlock C例例n 事務(wù)T1在對(duì)C進(jìn)行修改之前,先對(duì)C加X鎖,修改其值后寫回磁盤n T2請(qǐng)求在C上加S鎖,因T1已在C上加了X鎖,T2只能等待n T1因某種原因被撤銷,C恢復(fù)為原值100n T1釋放C上的X鎖后T2獲得C上的S鎖,讀C=100。避免了T2讀“臟”數(shù)據(jù)不讀不讀“臟臟”數(shù)據(jù)數(shù)據(jù) 第29頁(yè)/共76頁(yè)Locking 的問題 封鎖技術(shù)提供了一種可能的手段,可以用于并行操作的調(diào)度,使用得當(dāng),可

14、以保持?jǐn)?shù)據(jù)庫(kù)的一致性。 但封鎖也帶來一些新的問題 死鎖 活鎖第30頁(yè)/共76頁(yè)活鎖 事務(wù)T1封鎖了數(shù)據(jù)R 事務(wù)T2又請(qǐng)求封鎖R,于是T2等待。 T3也請(qǐng)求封鎖R,當(dāng)T1釋放了R上的封鎖之后系統(tǒng)首先批準(zhǔn)了T3的請(qǐng)求,T2仍然等待。 T4又請(qǐng)求封鎖R,當(dāng)T3釋放了R上的封鎖之后系統(tǒng)又批準(zhǔn)了T4的請(qǐng)求 T2有可能永遠(yuǎn)等待,這就是活鎖的情形 第31頁(yè)/共76頁(yè)活鎖(續(xù))活活 鎖鎖第32頁(yè)/共76頁(yè)活鎖(續(xù))避免活鎖:采用先來先服務(wù)的策略 當(dāng)多個(gè)事務(wù)請(qǐng)求封鎖同一數(shù)據(jù)對(duì)象時(shí) 按請(qǐng)求封鎖的先后次序?qū)@些事務(wù)排隊(duì) 該數(shù)據(jù)對(duì)象上的鎖一旦釋放,首先批準(zhǔn)申請(qǐng)隊(duì)列中第一個(gè)事務(wù)獲得鎖第33頁(yè)/共76頁(yè)死鎖 事務(wù)T1封鎖

15、了數(shù)據(jù)R1 T2封鎖了數(shù)據(jù)R2 T1又請(qǐng)求封鎖R2,因T2已封鎖了R2,于是T1等待T2釋放R2上的鎖 接著T2又申請(qǐng)封鎖R1,因T1已封鎖了R1,T2也只能等待T1釋放R1上的鎖 這樣T1在等待T2,而T2又在等待T1,T1和T2兩個(gè)事務(wù)永遠(yuǎn)不能結(jié)束,形成死鎖 第34頁(yè)/共76頁(yè)死鎖(續(xù))T1T2lock R1Lock R2Lock R2.等待等待Lock R1等待等待等待等待死 鎖第35頁(yè)/共76頁(yè)解決死鎖的方法兩類方法1. 預(yù)防死鎖2. 死鎖的診斷與解除第36頁(yè)/共76頁(yè)1. 死鎖的預(yù)防 產(chǎn)生死鎖的原因是兩個(gè)或多個(gè)事務(wù)都已封鎖了一些數(shù)據(jù)對(duì)象,然后又都請(qǐng)求對(duì)已為其他事務(wù)封鎖的數(shù)據(jù)對(duì)象加鎖,

16、從而出現(xiàn)死等待。 預(yù)防死鎖的發(fā)生就是要破壞產(chǎn)生死鎖的條件第37頁(yè)/共76頁(yè)死鎖的預(yù)防(續(xù))預(yù)防死鎖的方法 一次封鎖法 順序封鎖法第38頁(yè)/共76頁(yè)(1)一次封鎖法 要求每個(gè)事務(wù)必須一次將所有要使用的數(shù)據(jù)全部加鎖,否則就不能繼續(xù)執(zhí)行 存在的問題 降低系統(tǒng)并發(fā)度第39頁(yè)/共76頁(yè)一次封鎖法(續(xù)) 難于事先精確確定封鎖對(duì)象數(shù)據(jù)庫(kù)中數(shù)據(jù)是不斷變化的,原來不要求封鎖的數(shù)據(jù),在執(zhí)行過程中可能會(huì)變成封鎖對(duì)象,所以很難事先精確地確定每個(gè)事務(wù)所要封鎖的數(shù)據(jù)對(duì)象解決方法:將事務(wù)在執(zhí)行過程中可能要封鎖的數(shù)據(jù)對(duì)象全部加鎖,這就進(jìn)一步降低了并發(fā)度。第40頁(yè)/共76頁(yè)(2)順序封鎖法 順序封鎖法是預(yù)先對(duì)數(shù)據(jù)對(duì)象規(guī)定一個(gè)封

17、鎖順序,所有事務(wù)都按這個(gè)順序?qū)嵭蟹怄i。 順序封鎖法存在的問題 維護(hù)成本 高數(shù)據(jù)庫(kù)系統(tǒng)中封鎖的數(shù)據(jù)對(duì)象極多,并且隨數(shù)據(jù)的插入、刪除等操作而不斷地變化,要維護(hù)這樣的資源的封鎖順序非常困難,成本很高。 難以實(shí)現(xiàn) 事務(wù)的封鎖請(qǐng)求可以隨著事務(wù)的執(zhí)行而動(dòng)態(tài)地決定,很難事先確定每一個(gè)事務(wù)要封鎖哪些對(duì)象,因此也就很難按規(guī)定的順序去施加封鎖 第41頁(yè)/共76頁(yè)死鎖的預(yù)防(續(xù)) 結(jié)論 在操作系統(tǒng)中廣為采用的預(yù)防死鎖的策略并不很適合數(shù)據(jù)庫(kù)的特點(diǎn) DBMS在解決死鎖的問題上更普遍采用的是診斷并解除死鎖的方法第42頁(yè)/共76頁(yè)2. 死鎖的診斷與解除 死鎖的診斷n 超時(shí)法n 事務(wù)等待圖法 第43頁(yè)/共76頁(yè)(1) 超時(shí)法

18、 如果一個(gè)事務(wù)的等待時(shí)間超過了規(guī)定的時(shí)限,就認(rèn)為發(fā)生了死鎖 優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)單 缺點(diǎn) 有可能誤判死鎖 時(shí)限若設(shè)置得太長(zhǎng),死鎖發(fā)生后不能及時(shí)發(fā)現(xiàn)第44頁(yè)/共76頁(yè)(2)等待圖法 用事務(wù)等待圖動(dòng)態(tài)反映所有事務(wù)的等待情況 事務(wù)等待圖是一個(gè)有向圖G=(T,U)T為結(jié)點(diǎn)的集合,每個(gè)結(jié)點(diǎn)表示正運(yùn)行的事務(wù)U為邊的集合,每條邊表示事務(wù)等待的情況 若T1等待T2,則T1,T2之間劃一條有向邊,從T1指向T2第45頁(yè)/共76頁(yè)等待圖法(續(xù)) 事務(wù)等待圖n 圖(a)中,事務(wù)T1等待T2,T2等待T1,產(chǎn)生了死鎖n 圖(b)中,事務(wù)T1等待T2,T2等待T3,T3等待T4,T4又等待T1,產(chǎn)生了死鎖 n 圖(b)中,事務(wù)

19、T3可能還等待T2,在大回路中又有小的回路 第46頁(yè)/共76頁(yè)等待圖法(續(xù)) 并發(fā)控制子系統(tǒng)周期性地(比如每隔數(shù)秒)生成事務(wù)等待圖,檢測(cè)事務(wù)。如果發(fā)現(xiàn)圖中存在回路,則表示系統(tǒng)中出現(xiàn)了死鎖。第47頁(yè)/共76頁(yè)死鎖的診斷與解除(續(xù))解除死鎖 選擇一個(gè)處理死鎖代價(jià)最小的事務(wù),將其撤消 釋放此事務(wù)持有的所有的鎖,使其它事務(wù)能繼續(xù)運(yùn)行下去第48頁(yè)/共76頁(yè)如何利用封鎖技術(shù)調(diào)度事務(wù)? 我們已經(jīng)看到了“適當(dāng)”地使用封鎖,可以獲得正確的調(diào)度,否則可能造成“死鎖”,也就是說:東西是好東西,就看你怎么用了?采用封鎖的調(diào)度采用封鎖的調(diào)度可串行化的調(diào)度可串行化的調(diào)度第49頁(yè)/共76頁(yè)如何利用封鎖技術(shù)調(diào)度事務(wù)? 因此,

20、這個(gè)問題又變成了一個(gè)設(shè)計(jì)問題: 設(shè)計(jì)一種封鎖的使用策略,使得我們獲得的調(diào)度是可串行的調(diào)度(正確的調(diào)度)。采用封鎖的調(diào)度采用封鎖的調(diào)度可串行化的調(diào)度可串行化的調(diào)度第50頁(yè)/共76頁(yè)兩段鎖協(xié)議 封鎖協(xié)議 運(yùn)用封鎖方法時(shí),對(duì)數(shù)據(jù)對(duì)象加鎖時(shí)需要約定一些規(guī)則 何時(shí)申請(qǐng)封鎖 持鎖時(shí)間 何時(shí)釋放封鎖等 兩段封鎖協(xié)議(Two-Phase Locking,簡(jiǎn)稱2PL)是最常用的一種封鎖協(xié)議,理論上證明使用兩段封鎖協(xié)議產(chǎn)生的是可串行化調(diào)度 DBMS普遍采用兩段鎖協(xié)議的方法實(shí)現(xiàn)并發(fā)調(diào)度的可串行性,從而保證調(diào)度的正確性 第51頁(yè)/共76頁(yè)兩段鎖協(xié)議(續(xù)) 兩段鎖協(xié)議 指所有事務(wù)必須分兩個(gè)階段對(duì)數(shù)據(jù)項(xiàng)加鎖和解鎖 n 在

21、對(duì)任何數(shù)據(jù)進(jìn)行讀、寫操作之前,事務(wù)首先要獲得對(duì)該數(shù)據(jù)的封鎖n 在釋放一個(gè)封鎖之后,事務(wù)不再申請(qǐng)和獲得任何其他封鎖第52頁(yè)/共76頁(yè)兩段鎖協(xié)議(續(xù)) “兩段”鎖的含義事務(wù)分為兩個(gè)階段 第一階段是獲得封鎖,也稱為擴(kuò)展階段 事務(wù)可以申請(qǐng)獲得任何數(shù)據(jù)項(xiàng)上的任何類型的鎖,但是不能釋放任何鎖 第二階段是釋放封鎖,也稱為收縮階段 事務(wù)可以釋放任何數(shù)據(jù)項(xiàng)上的任何類型的鎖,但是不能再申請(qǐng)任何鎖 第53頁(yè)/共76頁(yè)兩段鎖協(xié)議(續(xù))例事務(wù)Ti遵守兩段鎖協(xié)議,其封鎖序列是 :Slock A Slock B Xlock C Unlock B Unlock A Unlock C;|擴(kuò)展階段| 收縮階段 |事務(wù)Tj不遵守兩

22、段鎖協(xié)議,其封鎖序列是: Slock A Unlock A Slock B Xlock C Unlock C Unlock B;第54頁(yè)/共76頁(yè)兩段鎖協(xié)議(續(xù))事務(wù)T1事務(wù)T2Slock(A)R(A=260)Slock(C)R(C=300)Xlock(A)W(A=160)Xlock( C )W(C=250)Slock(A)Slock(B)等待R(B=1000)等待Xlock(B)等待W(B=1100) 等待Unlock(A)等待R(A=160)Xlock(A)Unlock(B)W(A=210)遵守兩段鎖協(xié)議的可串行化調(diào)度n 左圖的調(diào)度是遵守兩段鎖協(xié)議的,因此一定是一個(gè)可串行化調(diào)度。n 如何驗(yàn)

23、證? 第55頁(yè)/共76頁(yè)遵循兩段封鎖協(xié)議就能預(yù)防死鎖?lock-S(A);lock-S(B);wait .lock-X(B)lock-X(A)wait T1 T2 T1: lock-S(A)lock-S(B) unlock(A)unlock(B)T2: lock-X(B)lock-X(A) unlock(A)unlock(B)第56頁(yè)/共76頁(yè)兩段鎖協(xié)議(續(xù)) 事務(wù)遵守兩段鎖協(xié)議是可串行化調(diào)度的充分條件,而不是必要條件。 若并發(fā)事務(wù)都遵守兩段鎖協(xié)議,則對(duì)這些事務(wù)的任何并發(fā)調(diào)度策略都是可串行化的 若并發(fā)事務(wù)的一個(gè)調(diào)度是可串行化的,不一定所有事務(wù)都符合兩段鎖協(xié)議 第57頁(yè)/共76頁(yè)兩段鎖協(xié)議(續(xù))

24、 兩段鎖協(xié)議與防止死鎖的一次封鎖法 一次封鎖法要求每個(gè)事務(wù)必須一次將所有要使用的數(shù)據(jù)全部加鎖,否則就不能繼續(xù)執(zhí)行,因此一次封鎖法遵守兩段鎖協(xié)議 但是兩段鎖協(xié)議并不要求事務(wù)必須一次將所有要使用的數(shù)據(jù)全部加鎖,因此遵守兩段鎖協(xié)議的事務(wù)可能發(fā)生死鎖第58頁(yè)/共76頁(yè)基于時(shí)間戳的協(xié)議基于時(shí)間戳的協(xié)議 另一種決定事務(wù)可串行化的方法是事先選定事務(wù)的次序,其中最常用的方法就是時(shí)間戳排序機(jī)制。對(duì)于系統(tǒng)中每個(gè)事務(wù)Ti,我們把一個(gè)惟一的固定時(shí)間戳和它聯(lián)系起來,記為TS(Ti)。該時(shí)間戳是在事務(wù)Ti開始執(zhí)行前由數(shù)據(jù)庫(kù)系統(tǒng)賦予的。若事務(wù)Ti已被賦予時(shí)間戳TS(Ti),其后有一新事務(wù)Tj進(jìn)入系統(tǒng),則TS(Ti)TS(T

25、j)。第59頁(yè)/共76頁(yè)基于時(shí)間戳的協(xié)議基于時(shí)間戳的協(xié)議 實(shí)現(xiàn)這種機(jī)制可以采用下面兩種簡(jiǎn)單的方法: (1)使用系統(tǒng)時(shí)鐘值作為時(shí)間戳,即事務(wù)的時(shí)間戳等于該事務(wù)進(jìn)入系統(tǒng)時(shí)的時(shí)鐘值。 (2)使用邏輯記數(shù)器(Logical Counter),每賦予一個(gè)時(shí)間戳,計(jì)數(shù)器增加一次,即事務(wù)的時(shí)間戳等于該事務(wù)進(jìn)入系統(tǒng)時(shí)的計(jì)數(shù)器值。第60頁(yè)/共76頁(yè)基于時(shí)間戳的協(xié)議基于時(shí)間戳的協(xié)議 時(shí)間戳的值產(chǎn)生了一個(gè)精確的順序,事務(wù)按該順序提交給DBMS。時(shí)間戳必須有兩個(gè)特性:惟一性和單調(diào)性。惟一性保證不存在相等的時(shí)間戳值,單調(diào)性保證時(shí)間戳的值是一直增長(zhǎng)的。同一事務(wù)中所有的數(shù)據(jù)庫(kù)操作(讀和寫)都必須有相同的時(shí)間戳。DBMS按照

26、時(shí)間戳順序執(zhí)行沖突的事務(wù),因此保證了事務(wù)的可串行化。如果兩個(gè)事務(wù)沖突,通常終止其中一個(gè),將其回滾并重新調(diào)度,賦予新的時(shí)間戳。第61頁(yè)/共76頁(yè)Sql Server的表級(jí)鎖 SQL Server 提供了幾種表級(jí)鎖,見表鎖定提示功能描述HOLDLOCK將共享鎖保留到事務(wù)完成NOLOCK語(yǔ)句執(zhí)行時(shí)不發(fā)出共享鎖PAGLOCK在使用表鎖的地方用多個(gè)頁(yè)READPAST只能用于SELECT語(yǔ)句ROWLOCK強(qiáng)制使用行鎖UPDLOCK強(qiáng)制讀表時(shí)使用更新瑣TABLOCKX強(qiáng)制使用獨(dú)占瑣第62頁(yè)/共76頁(yè)舉例說明 用兩個(gè)事務(wù)來表示T1和T2(T1為) Begin tran Declare current-time

27、 varchar(8) Select * from sc with (holdlock) Select current-time=convert(charchar,getdate(),8) Print T1加鎖時(shí)間為“+current-time Wait for delay 00:00:10 Select current-time=convert(charchar,getdate(),8) Print T1解鎖時(shí)間為“+current-time Commit tran第63頁(yè)/共76頁(yè)舉例說明 (T2為) Begin tran Declare current-time varchar(8) S

28、elect * from sc Select current-time=convert(charchar,getdate(),8) Print T2執(zhí)行select時(shí)間為“+current-time Update sc set grade=40 where grade40 Select current-time=convert(charchar,getdate(),8) Print T2執(zhí)行update時(shí)間為“+current-time rollback第64頁(yè)/共76頁(yè)事務(wù)隔離的并發(fā)控制 在SQL Server中可以用set transaction isolation level語(yǔ)句來設(shè)置事

29、務(wù)的隔離級(jí)別。 Read committed(提交讀):讀數(shù)據(jù)時(shí)有共享鎖,讀完后到事務(wù)結(jié)束前可以更新數(shù)據(jù)。 Read uncommitted:不加瑣 Repeatable read:鎖定查詢中的數(shù)據(jù)以防止其他用戶更新數(shù)據(jù),但是,可以插入數(shù)據(jù) Serializable:在數(shù)據(jù)集上放置一個(gè)范圍瑣,以防止其它用戶在事務(wù)結(jié)束前更新數(shù)據(jù)或插入數(shù)據(jù)第65頁(yè)/共76頁(yè)事務(wù)隔離的并發(fā)控制 在SQL Server中可以用set transaction isolation level語(yǔ)句來設(shè)置事務(wù)的隔離級(jí)別。隔離級(jí)別臟讀不可重復(fù)讀幻象讀Read uncommited是是是Read committed否是是Repeatable read否否是serializable否否否第66頁(yè)/共76頁(yè)事加瑣舉例務(wù) T1 Set transaction isolation level read uncommitted Begin tran t1 Update c

溫馨提示

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

評(píng)論

0/150

提交評(píng)論