《數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用》電子課件
《數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用》電子課件,數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用,數(shù)據(jù)庫(kù)技術(shù),應(yīng)用,電子,課件
第九章并發(fā)控制本章學(xué)習(xí)目標(biāo)l理解并發(fā)控制的含義。l理解封鎖機(jī)制,了解封鎖類型和封鎖協(xié)議。l了解死鎖的含義,掌握預(yù)防、檢測(cè)和解除死鎖的方法。l了解可串行化調(diào)度的含義和內(nèi)容。l了解兩段鎖協(xié)議和多粒度封鎖的概念和含義。l了解意向鎖的含義及幾種常見的意向鎖。本章概述 數(shù)據(jù)庫(kù)系統(tǒng)一般可分為單用戶系統(tǒng)和多用戶系統(tǒng)兩種。在任何一個(gè)時(shí)刻只允許一個(gè)用戶使用的數(shù)據(jù)庫(kù)系統(tǒng)稱為單用戶數(shù)據(jù)庫(kù)系統(tǒng),允許多個(gè)用戶同時(shí)使用的數(shù)據(jù)庫(kù)系統(tǒng)稱為多用戶數(shù)據(jù)庫(kù)系統(tǒng)。數(shù)據(jù)庫(kù)的一個(gè)重要特征是它能為多個(gè)用戶提供數(shù)據(jù)共享。數(shù)據(jù)庫(kù)管理系統(tǒng)允許共享的用戶數(shù)目是數(shù)據(jù)庫(kù)管理系統(tǒng)的重要性能指標(biāo)之一。因而多數(shù)數(shù)據(jù)庫(kù)系統(tǒng)都是多用戶系統(tǒng),這樣就會(huì)發(fā)生多個(gè)用戶并發(fā)存取同一數(shù)據(jù)塊的情況,如果對(duì)并發(fā)操作不加控制就可能產(chǎn)生不正確的數(shù)據(jù),破壞數(shù)據(jù)庫(kù)的完整性。數(shù)據(jù)庫(kù)管理系統(tǒng)必須提供并發(fā)控制機(jī)制來(lái)協(xié)調(diào)并發(fā)用戶的并發(fā)操作以保證并發(fā)事務(wù)的隔離性,保證數(shù)據(jù)庫(kù)的一致性。主要內(nèi)容9.1并發(fā)控制概述9.3活鎖和死鎖9.4并發(fā)調(diào)度的可串行化9.5兩段鎖協(xié)議9.2 封鎖9.6封鎖的粒度主要內(nèi)容9.1并發(fā)控制概述9.3活鎖和死鎖9.4并發(fā)調(diào)度的可串行化9.5兩段鎖協(xié)議9.2 封鎖9.6封鎖的粒度9.1并發(fā)的控制概述l并發(fā)控制的單位并發(fā)控制以事務(wù)為單位。l并發(fā)控制的任務(wù)確保在多個(gè)事務(wù)同時(shí)存取數(shù)據(jù)庫(kù)中同一數(shù)據(jù)時(shí)不破壞事務(wù)的隔離性和一致性以及數(shù)據(jù)庫(kù)的統(tǒng)一性。并發(fā)控制是以事務(wù)為單位進(jìn)行的。例:火車售票系統(tǒng)中,設(shè)某車次火車票余額R=100,甲乙兩個(gè)售票點(diǎn)同時(shí)出售該車次的車票。甲事務(wù)T1包含三個(gè)操作:讀取車票余額(READR)、售出車票(R=R-2)、更新余額(UPDATER)。乙事務(wù)T2也包含三個(gè)操作:讀取余額(READR)、售出車票(R=R-1)、更新余額(UPDATER)。如果T1和T2順序執(zhí)行,最后的車票余額應(yīng)該是97張。以此為例,對(duì)數(shù)據(jù)庫(kù)并發(fā)操作導(dǎo)致數(shù)據(jù)不一致性的三種情況進(jìn)行討論。9.1并發(fā)的控制概述1.丟失更新(LostUpdate)當(dāng)兩個(gè)事務(wù)T1和T2讀入同一數(shù)據(jù),并發(fā)執(zhí)行修改操作時(shí),T2把T1或T1把T2的修改結(jié)果覆蓋掉,造成數(shù)據(jù)的丟失更新(LostUpdate)問(wèn)題,導(dǎo)致數(shù)據(jù)的不一致。這個(gè)問(wèn)題是由于兩個(gè)事務(wù)對(duì)同一數(shù)據(jù)并發(fā)地寫入所引起的,又被稱為寫-寫沖突(Write-WriteConflict)。以火車售票系統(tǒng)為例,如果并發(fā)事務(wù)按照?qǐng)D9-1所示順序執(zhí)行,乙事務(wù)T2覆蓋了甲事務(wù)T1的修改結(jié)果,造成數(shù)據(jù)丟失更新,導(dǎo)致最后得到錯(cuò)誤的車票余額。圖9-1 2.不可重復(fù)讀(Non-RepeatableRead)事務(wù)T1讀取數(shù)據(jù)R后,事務(wù)T2讀取并且更新了R,當(dāng)T1再次讀取R時(shí),得到的兩次讀取值不一致,稱為不可重復(fù)讀。不可重復(fù)讀包括三種情況:(1)事務(wù)T1讀取某一數(shù)據(jù)后,事務(wù)T2對(duì)其做了修改,當(dāng)事務(wù)T1再次讀該數(shù)據(jù)時(shí),得到與前一次不同的值。在火車售票系統(tǒng)的例子中,如按圖9-2所示的順序執(zhí)行,則甲事務(wù)T1第一次讀取的R值為100,第二次讀取的R值為99,二次得到的值不一致。圖9-29.1并發(fā)的控制概述另外兩種不可重復(fù)讀的情況:(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í)也稱為幻影(Phantom)和幽靈(Ghost)現(xiàn)象。9.1并發(fā)的控制概述圖9-3 讀“臟”數(shù)據(jù)3.讀“臟”數(shù)據(jù)(DirtyRead)事務(wù)T2讀取了事務(wù)T1更新后的數(shù)據(jù)R,其后T1由于某種原因撤銷修改,數(shù)據(jù)R恢復(fù)原值,導(dǎo)致T2得到的數(shù)據(jù)與數(shù)據(jù)庫(kù)的內(nèi)容不一致,這種由于一個(gè)事務(wù)讀取另一個(gè)更新事務(wù)尚未提交的數(shù)據(jù)引起的不一致問(wèn)題,稱為臟讀(DirtyRead),又稱為讀-寫沖突(Read-WriteConflict)。在火車售票系統(tǒng)的例子中,如按圖9-3所示的順序執(zhí)行,則T2將T1修改過(guò)的值98讀出來(lái),之后T1執(zhí)行撤銷(ROLLBACK)操作,R的值恢復(fù)為100,而T2使用的值仍然是已經(jīng)被撤銷了的R值98。9.1并發(fā)的控制概述主要內(nèi)容9.1并發(fā)控制概述9.3活鎖和死鎖9.4并發(fā)調(diào)度的可串行化9.5兩段鎖協(xié)議9.2 封鎖9.6封鎖的粒度9.2封鎖l封鎖:事務(wù)T在對(duì)某個(gè)數(shù)據(jù)對(duì)象(例如表、記錄等)操作之前,先向系統(tǒng)發(fā)出請(qǐng)求,對(duì)其加鎖。加鎖后事務(wù)T就對(duì)該數(shù)據(jù)對(duì)象有了一定的控制,在事務(wù)T釋放它的鎖之前,其他的事務(wù)不能更新此數(shù)據(jù)對(duì)象。l封鎖包括3個(gè)環(huán)節(jié):(1)申請(qǐng)加鎖,即事務(wù)在操作前要對(duì)它欲使用的數(shù)據(jù)提出加鎖請(qǐng)求。(2)獲得鎖,即當(dāng)條件成熟時(shí),系統(tǒng)允許事務(wù)對(duì)數(shù)據(jù)加鎖,從而事務(wù)獲得數(shù)據(jù)的控制權(quán)。(3)釋放鎖,即完成操作后事務(wù)放棄數(shù)據(jù)的控制權(quán)。9.2.1鎖鎖是數(shù)據(jù)項(xiàng)上的并發(fā)控制標(biāo)志,它有兩種類型:共享鎖(SharedLock,簡(jiǎn)稱S鎖)和排它鎖(ExclusiveLock,簡(jiǎn)稱X鎖)(1)共享鎖又稱為讀鎖。若事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加上S鎖,則事務(wù)T可以讀A但不能修改A,其他事務(wù)只能再對(duì)A加S鎖,而不能加X(jué)鎖,直到T釋放A上的S鎖。這就保證了其他事務(wù)可以讀A,但在T釋放A上的S鎖之前不能對(duì)A做任何修改。共享鎖可以保證最大的并發(fā)性,任何數(shù)量的用戶可以同時(shí)對(duì)相同的數(shù)據(jù)施加共享鎖。(2)排它鎖又稱為寫鎖。若事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加上X鎖,則只允許T讀取和修改A,其他任何事務(wù)都不能再對(duì)A加任何類型的鎖,直到T釋放A上的鎖。這就保證了其他事務(wù)在T釋放A上的鎖之前不能再讀取和修改A。排它鎖是最嚴(yán)格的一類封鎖,當(dāng)需要對(duì)表進(jìn)行插入、刪除或更新操作時(shí),應(yīng)該使用排它鎖。當(dāng)一個(gè)事務(wù)對(duì)某數(shù)據(jù)加上排它鎖后,其他事務(wù)不得對(duì)該數(shù)據(jù)對(duì)象施加任何封鎖。9.2.2 封鎖協(xié)議在在運(yùn)運(yùn)用用X X鎖鎖和和S S鎖鎖給給數(shù)數(shù)據(jù)據(jù)對(duì)對(duì)象象加加鎖鎖時(shí)時(shí),還還需需要要約約定定一一些些規(guī)規(guī)則則,例例如如應(yīng)應(yīng)何何時(shí)時(shí)申申請(qǐng)請(qǐng)X X鎖鎖或或S S鎖鎖、封封鎖鎖時(shí)時(shí)間間、何何時(shí)時(shí)釋釋放放等等。我我們們稱稱這這些些規(guī)規(guī)則則為為封封鎖鎖協(xié)協(xié)議議(Locking(Locking Protocol)Protocol)。對(duì)對(duì)封封鎖鎖方方式式規(guī)規(guī)定定不不同同的的規(guī)規(guī)則則,就就形形成成了了各各種種不不同同的的封封鎖鎖協(xié)協(xié)議議。下下面面介介紹紹三三級(jí)級(jí)封封鎖鎖協(xié)協(xié)議議。三三級(jí)級(jí)封封鎖鎖協(xié)協(xié)議議分分別別在在不不同同程程度度上上解解決決了了丟丟失失更更新新、不不可可重重復(fù)復(fù)讀讀和和讀讀“臟臟”數(shù)數(shù)據(jù)據(jù)等等不不一一致致性性問(wèn)問(wèn)題題,為為并并發(fā)發(fā)操作的正確調(diào)度提供一定的保證。操作的正確調(diào)度提供一定的保證。圖9-4 不丟失更新9.2.2 封鎖協(xié)議1 1、一級(jí)封鎖協(xié)議、一級(jí)封鎖協(xié)議事務(wù)T在修改數(shù)據(jù)R之前必須先對(duì)其加X(jué)鎖,直到事務(wù)結(jié)束才釋放。事務(wù)結(jié)束包括正常結(jié)束(COMMIT)和 非 正 常 結(jié) 束(ROLLBACK)。一級(jí)封鎖協(xié)議可防止丟失修改,并保證事務(wù)T是可恢復(fù)的,如圖9-4所示。在一級(jí)封鎖協(xié)議中,如果僅僅是讀數(shù)據(jù)不對(duì)其進(jìn)行修改,是不需要加鎖的,所以它不能保證可重復(fù)讀和不讀“臟”數(shù)據(jù)。圖9-5不讀“臟”數(shù)據(jù)9.2.2 封鎖協(xié)議2 2、二級(jí)封鎖協(xié)議、二級(jí)封鎖協(xié)議 二級(jí)封鎖協(xié)議包含一級(jí)封鎖協(xié)議,再加上事務(wù)T在讀取數(shù)據(jù)R之前必須先對(duì)其加S鎖,讀完后即可釋放S鎖。二級(jí)封鎖協(xié)議定是:事務(wù)T對(duì)數(shù)據(jù)R做讀、寫操作時(shí)使用X鎖,防止了丟失修改;做讀操作時(shí)使用S鎖,從而防止讀“臟”數(shù)據(jù),如圖9-5所示。在二級(jí)封鎖協(xié)議中,由于事務(wù)T讀完數(shù)據(jù)即釋放S鎖,因此,不能保證可重復(fù)讀數(shù)據(jù)。圖9-6可重復(fù)讀9.2.2 封鎖協(xié)議3、三級(jí)封鎖協(xié)議 三級(jí)封鎖協(xié)議同樣包含一級(jí)封鎖協(xié)議,再加上事務(wù)T在讀取數(shù)據(jù)R之前必須先對(duì)其加S鎖,直到事務(wù)結(jié)束才釋放。三級(jí)封鎖協(xié)議包含一級(jí)封鎖寫協(xié)議,因此防止了丟失修改,同時(shí)包含了二級(jí)協(xié)議,防止讀“臟”數(shù)據(jù);再者,由于對(duì)數(shù)據(jù)R寫時(shí)加X(jué)封鎖,讀時(shí)加S封鎖,這兩種封鎖都是到事務(wù)結(jié)束后才釋放,因此還防止了不可重復(fù)讀,如圖9-6所示。表9-1 不同級(jí)別的封鎖協(xié)議封鎖封鎖協(xié)議協(xié)議X鎖鎖(對(duì)寫對(duì)寫數(shù)據(jù)數(shù)據(jù))S鎖鎖(對(duì)讀對(duì)讀數(shù)據(jù)數(shù)據(jù))不丟失不丟失更新更新(寫寫)不讀不讀“臟臟”數(shù)據(jù)數(shù)據(jù)(讀讀)可重復(fù)可重復(fù)讀讀(讀讀)一級(jí)一級(jí)事務(wù)全程事務(wù)全程加鎖加鎖不加不加二級(jí)二級(jí)事務(wù)全程事務(wù)全程加鎖加鎖事務(wù)開始事務(wù)開始加鎖加鎖,讀完讀完即釋放鎖即釋放鎖三級(jí)三級(jí)事務(wù)全程事務(wù)全程加鎖加鎖事務(wù)全程事務(wù)全程加鎖加鎖上述3個(gè)級(jí)別封鎖協(xié)議的特點(diǎn)如表9-1所示,它們的區(qū)別在于哪些操作需要申請(qǐng)加鎖以及何時(shí)釋放鎖。9.2.2 封鎖協(xié)議主要內(nèi)容9.1并發(fā)控制概述9.3活鎖和死鎖9.4并發(fā)調(diào)度的可串行化9.5兩段鎖協(xié)議9.2 封鎖9.6封鎖的粒度9.3.1 活鎖 如果事務(wù)T1鎖定了數(shù)據(jù)庫(kù)對(duì)象A,事務(wù)T2又請(qǐng)求已被T1鎖定的A,但失敗而需要等待,此時(shí)事務(wù)T3也請(qǐng)求已被T1鎖定的A,也失敗而需要等待。當(dāng)T1釋放A上的鎖時(shí),系統(tǒng)批準(zhǔn)了T3的請(qǐng)求,使得T2依然等待,此時(shí)事務(wù)T4請(qǐng)求已被T3鎖定A,但失敗而需要等待。當(dāng)T3釋放A上的鎖時(shí),系統(tǒng)批準(zhǔn)了T4的請(qǐng)求,使得T2依然等待,。這就有可能使T2總是在等待而無(wú)法鎖定A,但總還是有鎖定A的希望,這就是活鎖的情形,如圖9-7所示。避免活鎖策略:先來(lái)先服務(wù)。圖9-7 活鎖和死鎖示意圖9.3.2 死鎖如果事務(wù)T1鎖定了數(shù)據(jù)庫(kù)對(duì)象A1,事務(wù)T2鎖定了數(shù)據(jù)庫(kù)對(duì)象A2,然后T1又請(qǐng)求已被T2鎖定的A2,但失敗而需要等待,此時(shí)事務(wù)T2又請(qǐng)求已被T1鎖定的A1,也失敗而需要等待。這就出現(xiàn)了T1在等待T2,而T2又在等待T1的局面,使T1和T2這兩個(gè)事務(wù)永遠(yuǎn)沒(méi)有結(jié)束的希望,這就是死鎖(deadlock)的情形,如圖9-7所示。在數(shù)據(jù)庫(kù)中解決死鎖的方法主要有兩種。一種是采取一定措施來(lái)預(yù)防死鎖的發(fā)生,另一種是允許死鎖發(fā)生,但采用一定手段定期診斷系統(tǒng)中有無(wú)死鎖,若有則解除之。1.死鎖的預(yù)防預(yù)防死鎖的發(fā)生其實(shí)就是要破壞產(chǎn)生死鎖的條件。預(yù)防死鎖通常有兩種方法:一次封鎖法和順序封鎖法。(1)一次封鎖法該方法要求每個(gè)事務(wù)一次將要使用的數(shù)據(jù)庫(kù)對(duì)象全部鎖定,否則就不繼續(xù)執(zhí)行。在圖9.4的例子中,如果事務(wù)T1將數(shù)據(jù)庫(kù)對(duì)象A1和A2一次全部都鎖定的話,T1就會(huì)執(zhí)行下去。則T2在加鎖時(shí)就只能等待,但在T1執(zhí)行完畢釋放鎖之后,就可以鎖定A1、A2,也可以執(zhí)行下去,這樣就不會(huì)發(fā)生死鎖。缺點(diǎn):其一,一次就鎖定以后才會(huì)用到的數(shù)據(jù)庫(kù)對(duì)象,擴(kuò)大了當(dāng)前的鎖定范圍,從而降低了系統(tǒng)的并發(fā)性。其二,數(shù)據(jù)庫(kù)中的對(duì)象是不斷變化的,原來(lái)不需要鎖定的對(duì)象,在執(zhí)行的過(guò)程中很可能就需要加鎖,所以很難事先精確估計(jì)出每個(gè)事務(wù)一次性需要鎖定的對(duì)象,因此只能將事務(wù)在執(zhí)行過(guò)程中可能要封鎖的數(shù)據(jù)對(duì)象全部加鎖,進(jìn)一步降低了并發(fā)度。9.3.2 死鎖(2)順序封鎖法該方法要求預(yù)先對(duì)數(shù)據(jù)庫(kù)對(duì)象規(guī)定一個(gè)封鎖順序,所有事務(wù)都按這個(gè)順序來(lái)實(shí)行封鎖。在圖9.4的例子中,如果確定封鎖順序?yàn)锳1,A2,T1和T2都按此順序封鎖,即T2也必須先封鎖A1。當(dāng)T2請(qǐng)求A1的封鎖時(shí),由于T1已經(jīng)封鎖住A1,T2就只能等待。T1釋放A1,A2上的鎖后,T2才能開始加鎖并開始運(yùn)行,這樣就不會(huì)發(fā)生死鎖。缺點(diǎn):其一,要鎖定的數(shù)據(jù)庫(kù)對(duì)象可能比較多,并且隨著創(chuàng)建、插入、刪除等操作而不斷變化,要維護(hù)一個(gè)嚴(yán)格的封鎖順序非常困難,算法復(fù)雜,成本很高。其二,事務(wù)的封鎖請(qǐng)求可以隨事務(wù)的執(zhí)行而動(dòng)態(tài)變化,很難事先確定每一個(gè)事務(wù)要封鎖哪些對(duì)象,因此也就很難按規(guī)定的順序去封鎖對(duì)象。例如,若規(guī)定數(shù)據(jù)對(duì)象的封鎖順序?yàn)锳、B、C、D、E。事務(wù)T起初要求封鎖數(shù)據(jù)對(duì)象B、C、E,但當(dāng)它封鎖B,C后,才發(fā)現(xiàn)還需要封鎖A,這樣就破壞了封鎖順序。9.3.2 死鎖2.死鎖的診斷和解除與操作系統(tǒng)中診斷死鎖的方法類似,數(shù)據(jù)庫(kù)管理系統(tǒng)中一般使用超時(shí)法和事務(wù)等待圖法。(1)超時(shí)法該方法規(guī)定如果一個(gè)事務(wù)的等待時(shí)間超過(guò)了規(guī)定的時(shí)限,就認(rèn)為發(fā)生了死鎖。超時(shí)法實(shí)現(xiàn)簡(jiǎn)單,但其不足也很明顯。一是有可能誤判死鎖,如果事務(wù)因?yàn)槠渌蚴沟却龝r(shí)間超過(guò)時(shí)限,系統(tǒng)會(huì)誤認(rèn)為發(fā)生了死鎖。二是時(shí)限若設(shè)置得太長(zhǎng),死鎖發(fā)生后不能及時(shí)發(fā)現(xiàn)和處理。(2)事務(wù)等待圖法這是用離散數(shù)學(xué)的圖論來(lái)診斷死鎖的方法。事務(wù)的等待圖是一個(gè)有向圖G(T,U)。T為結(jié)點(diǎn)的集合,每個(gè)結(jié)點(diǎn)表示正在運(yùn)行的事務(wù),U為有向邊的集合,每條邊表示事務(wù)等待的情況。如果事務(wù)T1等待事務(wù)T2,則在T1、T2節(jié)點(diǎn)之間就有一條從T1指向T2的有向邊。9.3.2 死鎖事務(wù)等待圖動(dòng)態(tài)地反映了當(dāng)前各個(gè)事務(wù)之間的等待情況。DBMS的并發(fā)控制子系統(tǒng)周期性地(比如每隔數(shù)秒)生成事務(wù)等待圖,并進(jìn)行檢測(cè)。如果發(fā)現(xiàn)圖中存在回路,則表示系統(tǒng)中出現(xiàn)了死鎖。圖9-8事務(wù)等待圖9.3.2 死鎖如圖9-8(a)所示事務(wù)T1等待事務(wù)T2,T2等待T1,因此產(chǎn)生了死鎖。圖9-8(b)中,T1等待T2,T2等待T3,T3等待T4,T3等待T2,T4又等待T1,因此也產(chǎn)生了死鎖。數(shù)據(jù)庫(kù)管理系統(tǒng)會(huì)周期性地檢測(cè)死鎖,發(fā)現(xiàn)死鎖后,靠事務(wù)本身無(wú)法打破死鎖,必須由數(shù)據(jù)庫(kù)管理系統(tǒng)進(jìn)行干預(yù)。數(shù)據(jù)庫(kù)管理系統(tǒng)對(duì)死鎖一般采用如下策略:在循環(huán)等待的事務(wù)中,選擇一個(gè)事務(wù)作為犧牲者,給其他事務(wù)“讓路”。回滾犧牲的事務(wù),釋放其獲得的鎖及其他資源。將釋放的鎖讓給等待它的事務(wù)。選取犧牲事務(wù)的方法有以下幾種:選擇最遲交付的事務(wù)作為犧牲者。選擇獲得鎖最少的事務(wù)作為犧牲者。選擇回滾代價(jià)最小的事務(wù)作為犧牲者。9.3.2 死鎖主要內(nèi)容9.1并發(fā)控制概述9.3活鎖和死鎖9.4并發(fā)調(diào)度的可串行化9.5兩段鎖協(xié)議9.2 封鎖9.6封鎖的粒度9.4 并發(fā)調(diào)度的可串行化在在數(shù)數(shù)據(jù)據(jù)庫(kù)庫(kù)管管理理系系統(tǒng)統(tǒng)中中,調(diào)調(diào)度度是是指指多多個(gè)個(gè)并并發(fā)發(fā)事事務(wù)務(wù)的的一一種種執(zhí)執(zhí)行行順順序序,表表示示事事務(wù)務(wù)的的語(yǔ)語(yǔ)句句在在系系統(tǒng)統(tǒng)中中執(zhí)執(zhí)行行的的時(shí)時(shí)間間順順序序。串串行行調(diào)調(diào)度度指指事事務(wù)務(wù)按按順順序序執(zhí)執(zhí)行行,其其中中每每個(gè)個(gè)事事務(wù)務(wù)都都是是在在上上一一個(gè)個(gè)事事務(wù)務(wù)完完全全結(jié)結(jié)束束之之后后才才開開始始執(zhí)執(zhí)行行,一一個(gè)個(gè)事事務(wù)務(wù)在在執(zhí)執(zhí)行行過(guò)過(guò)程程中中沒(méi)沒(méi)有有其其他事務(wù)同時(shí)執(zhí)行。他事務(wù)同時(shí)執(zhí)行。DBMS對(duì)對(duì)并并發(fā)發(fā)事事務(wù)務(wù)的的調(diào)調(diào)度度是是隨隨機(jī)機(jī),因因此此不不同同的的調(diào)調(diào)度度可可能能會(huì)會(huì)產(chǎn)產(chǎn)生生不不同同的的結(jié)結(jié)果果,如如何何判判定定哪哪個(gè)個(gè)調(diào)調(diào)度度的的結(jié)結(jié)果果是是正正確確的的呢呢?顯然,?顯然,串行調(diào)度的結(jié)果是正確的串行調(diào)度的結(jié)果是正確的。9.4.1 可串行化調(diào)度數(shù)據(jù)庫(kù)管理系統(tǒng)對(duì)事務(wù)進(jìn)行合理的調(diào)度,使得事務(wù)可以并行地執(zhí)行,相互之間沒(méi)有干擾,以提高系統(tǒng)的并發(fā)性。多個(gè)事務(wù)并發(fā)執(zhí)行是正確的,當(dāng)且僅當(dāng)其結(jié)果與某一次串行地執(zhí)行這些事務(wù)的結(jié)果相同,則稱這種調(diào)度策略是可串行化(Serializable)的調(diào)度??纱谢遣l(fā)事務(wù)正確性的準(zhǔn)則。一個(gè)給定的并發(fā)調(diào)度,當(dāng)且僅當(dāng)它是可串行化的,才認(rèn)為是正確調(diào)度。例如有兩個(gè)事務(wù),分別包含以下操作:事務(wù)T1:讀取B;A=B+1;寫回A;事務(wù)T2:讀取A;B=A+1;寫回B;圖9-9給出對(duì)這兩個(gè)事務(wù)的不同調(diào)度策略。設(shè)A、B初值都為2。圖9-9并發(fā)事務(wù)的不同調(diào)度例如有兩個(gè)事務(wù),分別包含以下操作:事務(wù)T1:讀取B;A=B+1;寫回A;事務(wù)T2:讀取A;B=A+1;寫回B;圖9-9給出對(duì)這兩個(gè)事務(wù)的不同調(diào)度策略。設(shè)A、B初值都為2。9.4.1 可串行化調(diào)度9.4.2 沖突可串行化調(diào)度并發(fā)事務(wù)影響數(shù)據(jù)一致性的操作只有讀和寫操作。不同的事務(wù)對(duì)同一數(shù)據(jù)的讀寫操作和寫寫操作屬于沖突操作,其他不是沖突操作。不同事務(wù)的沖突操作和同一事務(wù)的兩個(gè)操作是不能交換的。一個(gè)調(diào)度SC1在保證沖突操作的次序不變的情況下,通過(guò)交換兩個(gè)事務(wù)不沖突操作的次序得到另一個(gè)調(diào)度SC2,如果SC2是串行的,則稱調(diào)度SC1為沖突可串行化的調(diào)度。一個(gè)調(diào)度是沖突可串行化的,一定是可串行化調(diào)度。沖突可串行化是可串行化調(diào)度的充分條件,但不是必要條件。主要內(nèi)容9.1并發(fā)控制概述9.3活鎖和死鎖9.4并發(fā)調(diào)度的可串行化9.5兩段鎖協(xié)議9.2 封鎖9.6封鎖的粒度9.5 兩段鎖協(xié)議為了保證調(diào)度一定等價(jià)于一個(gè)串行調(diào)度,采用兩段鎖(Two-PhaseLocking,簡(jiǎn)稱2PL)協(xié)議來(lái)限制封鎖的操作時(shí)機(jī)。l兩段鎖協(xié)議規(guī)則:(1)事務(wù)在進(jìn)行讀寫數(shù)據(jù)操作之前,首先要申請(qǐng)并獲得對(duì)該數(shù)據(jù)的封鎖。(2)在釋放一個(gè)封鎖之后,事務(wù)不再申請(qǐng)和獲得任何其他封鎖。l兩段鎖包含3個(gè)階段。(1)封鎖階段。處于該階段的事務(wù)可以申請(qǐng)獲得任何數(shù)據(jù)項(xiàng)上的任何類型的鎖,但不能釋放任何鎖。(2)持鎖階段。在這個(gè)階段,事務(wù)不加鎖也不釋放任何鎖。(3)釋鎖階段。處于該階段的事務(wù)可以釋放任何數(shù)據(jù)項(xiàng)上任何類型的鎖,但不能再申請(qǐng)任何鎖。9-10可串行化調(diào)度若并發(fā)事務(wù)都遵守兩段鎖協(xié)議,則對(duì)這些事務(wù)的任何并發(fā)調(diào)度都是可串行化的。但是,不遵守兩段鎖協(xié)議的事務(wù)的某些并發(fā)調(diào)度也可能是可串行化的,也就是說(shuō)事務(wù)遵守兩段鎖協(xié)議是可串行化調(diào)度的充分條件,但不是必要條件,如圖9-10所示。遵守兩段鎖協(xié)議的事務(wù)仍然可能產(chǎn)生死鎖,因?yàn)榕c防止死鎖的一次封鎖法不同,兩段鎖協(xié)議并不要求事務(wù)一次將所有要使用的數(shù)據(jù)對(duì)象全部加鎖。9.5 兩段鎖協(xié)議主要內(nèi)容9.1并發(fā)控制概述9.3活鎖和死鎖9.4并發(fā)調(diào)度的可串行化9.6封鎖的粒度9.2 封鎖9.5兩段鎖協(xié)議9.6 封鎖的粒度封封鎖鎖對(duì)對(duì)象象的的大大小小稱稱為為封封鎖鎖粒粒度度(Granularity)(Granularity)。封封鎖鎖的的對(duì)對(duì)象象可可以以是是邏邏輯輯單單元元,也也可可以以是是物物理理單單元元。以以關(guān)關(guān)系系數(shù)數(shù)據(jù)據(jù)庫(kù)庫(kù)為為例例,封封鎖鎖對(duì)對(duì)象象可可以以是是邏邏輯輯單單元元(如如數(shù)數(shù)據(jù)據(jù)庫(kù)庫(kù)、表表、記記錄錄、列列、索索引引等等),也也可可以以是是物物理理單單元元 (如如數(shù)數(shù)據(jù)據(jù)頁(yè)頁(yè)或或索索引引頁(yè)頁(yè)、塊塊等等)。9.6.1 鎖的粒度封鎖的粒度與系統(tǒng)的并發(fā)度和并發(fā)控制的開銷密切相關(guān)。一般地,鎖定的粒度越大,需要鎖定的對(duì)象就越少,可選擇性就越小,并發(fā)度就越小,開銷就越?。环粗?,鎖定的粒度越小,需要鎖定的對(duì)象就越多,可選擇性就越大,并發(fā)度就越大,開銷就越大。例如:如果鎖定的粒度是表,事務(wù)T1需要操作表A中的記錄r1,則T1必須對(duì)包含記錄r1的表A加鎖。在T1對(duì)A加鎖之后,事務(wù)T2需要操作表A中的記錄r2,因此就需要對(duì)表A加鎖,但此時(shí)因?yàn)門1已經(jīng)在表A上加了鎖,所以T2的加鎖就會(huì)失敗,就被迫等待,直到T1釋放鎖為止,事務(wù)T1和T2就不能并發(fā)執(zhí)行。如果鎖定的粒度是記錄,則事務(wù)T1可以對(duì)表A中的記錄r1加鎖,同時(shí)事務(wù)T2也可以對(duì)表A中的記錄r2加鎖,所以事務(wù)T1和T2就可以并發(fā)執(zhí)行,并發(fā)度就增大了,但維護(hù)這個(gè)并發(fā)度就需要更多的開銷。現(xiàn)有的商業(yè)數(shù)據(jù)庫(kù)管理系統(tǒng)都提供如下不同的封鎖粒度。數(shù)據(jù)庫(kù)級(jí)數(shù)據(jù)庫(kù)級(jí)鎖對(duì)整個(gè)數(shù)據(jù)庫(kù)進(jìn)行加鎖,因此,在某個(gè)事務(wù)執(zhí)行期間可防止其他事務(wù)使用該數(shù)據(jù)庫(kù)。表級(jí)表級(jí)鎖對(duì)整個(gè)表進(jìn)行加鎖,因此,在某個(gè)事務(wù)執(zhí)行期間可防止其他事務(wù)使用該表。如果某個(gè)事務(wù)要訪問(wèn)一些表,必須對(duì)每個(gè)表加鎖,但兩個(gè)事務(wù)可以訪問(wèn)相同的數(shù)據(jù)庫(kù),只要不訪問(wèn)相同的表即可。頁(yè)級(jí)頁(yè)級(jí)鎖對(duì)整個(gè)磁盤頁(yè)(或磁盤塊)進(jìn)行加鎖。一個(gè)數(shù)據(jù)庫(kù)表包含多個(gè)頁(yè),一個(gè)頁(yè)包含一個(gè)或多個(gè)表的若干行(或元組)數(shù)據(jù)。頁(yè)級(jí)鎖最適合多用戶數(shù)據(jù)庫(kù)管理系統(tǒng)。9.6.1 鎖的粒度行級(jí)行級(jí)鎖對(duì)數(shù)據(jù)庫(kù)表中特定的行(或元組)進(jìn)行加鎖。行級(jí)鎖允許多個(gè)事務(wù)同時(shí)訪問(wèn)同一個(gè)表中的不同行數(shù)據(jù),即使這些行位于相同的頁(yè)上。行級(jí)鎖比數(shù)據(jù)庫(kù)級(jí)鎖、表級(jí)鎖和頁(yè)級(jí)鎖的限制要少得多,行級(jí)鎖提高了事務(wù)的并發(fā)性,但對(duì)系統(tǒng)管理成本要求很高。屬性級(jí)屬性級(jí)鎖對(duì)特定的屬性(或字段)進(jìn)行加鎖。屬性級(jí)鎖允許多個(gè)事務(wù)同時(shí)訪問(wèn)數(shù)據(jù)庫(kù)表中的相同行,只要不訪問(wèn)相同的屬性即可。屬性級(jí)鎖提高了數(shù)據(jù)庫(kù)系統(tǒng)的并發(fā)性,但需要較高的系統(tǒng)開銷。9.6.1 鎖的粒度9.6.2 多粒度封鎖l多粒度封鎖如果在一個(gè)數(shù)據(jù)庫(kù)管理系統(tǒng)中,同時(shí)支持多種鎖定粒度供事務(wù)選擇,這種鎖定方法就被稱為多粒度封鎖(MultipleGranularityLocking)。l粒度選擇選擇封鎖粒度時(shí)應(yīng)該同時(shí)考慮并發(fā)度與開銷兩個(gè)因素,以取得最優(yōu)的并發(fā)調(diào)度效果。一般地,需要處理大量記錄的事務(wù)可以以表為封鎖粒度,需要處理多個(gè)表中的大量記錄的事務(wù)可以以數(shù)據(jù)庫(kù)為封鎖粒度,而只需要處理某個(gè)表中少量記錄的事務(wù),則可以以記錄為封鎖粒度。l多粒度樹多粒度樹的根結(jié)點(diǎn)是整個(gè)數(shù)據(jù)庫(kù),表示最大的數(shù)據(jù)粒度。葉結(jié)點(diǎn)表示最小的數(shù)據(jù)粒度。多粒度封鎖協(xié)議允許對(duì)多粒度樹中的節(jié)點(diǎn)單獨(dú)地加鎖。另外,對(duì)一個(gè)節(jié)點(diǎn)加鎖還意味著對(duì)這個(gè)節(jié)點(diǎn)的各級(jí)子節(jié)點(diǎn)也加同樣的鎖。顯式封鎖是在事務(wù)中明確指定要加在節(jié)點(diǎn)上的鎖,隱式封鎖是由于在其上級(jí)節(jié)點(diǎn)中加顯式鎖時(shí)而使該節(jié)點(diǎn)獲得的鎖。l加鎖三檢查第一要檢查在該節(jié)點(diǎn)上有無(wú)顯式鎖定與之沖突。第二要檢查其所有上級(jí)節(jié)點(diǎn)有無(wú)顯式鎖定與之沖突,以便查看在該節(jié)點(diǎn)上加顯式鎖定是否會(huì)與從上級(jí)節(jié)點(diǎn)獲得的隱式鎖定有沖突。第三要檢查所有下級(jí)節(jié)點(diǎn)有無(wú)顯式鎖定與之沖突,以便查看在該節(jié)點(diǎn)上加顯式鎖定是否會(huì)使下級(jí)節(jié)點(diǎn)從該節(jié)點(diǎn)獲得的隱式鎖定與其顯式鎖定有沖突。這種檢查鎖定沖突的方法的效率很低,所以引進(jìn)了意向鎖(intendedlock)的概念。9.6.2 多粒度封鎖9.6.3 意向鎖意意向向鎖鎖:如如果果對(duì)對(duì)一一個(gè)個(gè)節(jié)節(jié)點(diǎn)點(diǎn)加加某某種種意意向向鎖鎖,則則會(huì)會(huì)對(duì)對(duì)該該節(jié)節(jié)點(diǎn)點(diǎn)的的各各級(jí)級(jí)下下級(jí)級(jí)節(jié)節(jié)點(diǎn)點(diǎn)加加這這種種鎖鎖。如如果果對(duì)對(duì)一一個(gè)個(gè)節(jié)節(jié)點(diǎn)點(diǎn)加加某某種種鎖鎖,則則必必須須先先對(duì)對(duì)該該節(jié)節(jié)點(diǎn)點(diǎn)的的各各級(jí)級(jí)上級(jí)節(jié)點(diǎn)加這種意向鎖。上級(jí)節(jié)點(diǎn)加這種意向鎖。例:對(duì)記錄R1加鎖時(shí),必須先對(duì)它所在的表A加意向鎖。于是,事務(wù)T1對(duì)表A加X(jué)鎖時(shí),系統(tǒng)只需要檢查根節(jié)點(diǎn)數(shù)據(jù)庫(kù)D和表A是否已經(jīng)加了不相容的鎖,而不再需要檢查表A中每個(gè)記錄是否加了X鎖。l意向共享鎖(Intent Share Lock,簡(jiǎn)稱IS鎖)如果對(duì)一個(gè)節(jié)點(diǎn)加IS鎖,則表示對(duì)它的所有下級(jí)節(jié)點(diǎn)有加S鎖的意向。如果對(duì)一個(gè)節(jié)點(diǎn)加S鎖,則必須先對(duì)該節(jié)點(diǎn)的各級(jí)上級(jí)節(jié)點(diǎn)加IS鎖。例如:事務(wù)T要對(duì)表A中的記錄R1加S鎖,則要先對(duì)表A和數(shù)據(jù)庫(kù)加IS鎖。l意向排他鎖(Intent Exclusive Lock,簡(jiǎn)稱IX鎖)如果對(duì)一個(gè)節(jié)點(diǎn)加IX鎖,則表示對(duì)它的所有下級(jí)節(jié)點(diǎn)有加X(jué)鎖的意向。如果對(duì)一個(gè)節(jié)點(diǎn)加X(jué)鎖,則必須先對(duì)該節(jié)點(diǎn)的各級(jí)上級(jí)節(jié)點(diǎn)加IX鎖。例如:事務(wù)T要對(duì)表A中的記錄R1加X(jué)鎖,則要先對(duì)表A和數(shù)據(jù)庫(kù)加IX鎖。l共享意向排他鎖共享意向排他鎖(Share Intent Exclusive Lock(Share Intent Exclusive Lock,簡(jiǎn)稱,簡(jiǎn)稱SIXSIX鎖鎖)如果對(duì)一個(gè)節(jié)點(diǎn)加SIX鎖,則表示對(duì)它加S鎖,然后再加IX鎖,即SIXSIX。例如,如果事務(wù)T對(duì)表A加SIX鎖,則表示事務(wù)T要讀取整個(gè)表(所以要對(duì)該表加S鎖),同時(shí)還會(huì)更新某些記錄(所以要對(duì)該表加IX鎖)。各種意向鎖之間的相容規(guī)則如表9-2所示。Y=YES,表示相容的請(qǐng)求,N=NO,表示不相容的請(qǐng)求,“-”表示未加鎖。表9-2各種意向鎖之間的相容規(guī)則 T1 T2SXISIXSIX-SYNYNNYXNNNNNYISYNYYYYIXNNYYNYSIXNNYNNY-YYYYYY9.6.3 意向鎖本章小結(jié)數(shù)數(shù)據(jù)據(jù)庫(kù)庫(kù)是是一一個(gè)個(gè)共共享享資資源源,為為了了充充分分利利用用這這一一資資源源,允允許許多多個(gè)個(gè)用用戶戶程程序序并并行行地地操操作作數(shù)數(shù)據(jù)據(jù)庫(kù)庫(kù),這這就就會(huì)會(huì)產(chǎn)產(chǎn)生生多多個(gè)個(gè)用用戶戶程程序序并并發(fā)發(fā)地地存存取取同同一一數(shù)數(shù)據(jù)據(jù)的的情情況況,若若對(duì)對(duì)并并發(fā)發(fā)操操作作不不加加控控制制,就就會(huì)會(huì)破破壞壞數(shù)數(shù)據(jù)據(jù)的的一一致致性性。為為保保證證數(shù)數(shù)據(jù)據(jù)的的一一致致性性,對(duì)對(duì)并并發(fā)發(fā)操操作作采采取取的的主主要要措措施施有有兩兩個(gè)個(gè):一一是是封封鎖鎖機(jī)機(jī)制制,另另一一是是可可串串行行化化調(diào)調(diào)度度。采采用用封封鎖鎖機(jī)機(jī)制制必必須須解解決決死死鎖鎖的的問(wèn)問(wèn)題題,解解決決死死鎖鎖常常用用的的方方法法有有死死鎖鎖避避免免與與死死鎖鎖檢檢測(cè)測(cè)。為為了了真真正正提提高高數(shù)數(shù)據(jù)據(jù)庫(kù)庫(kù)的的利利用用率率及及并并發(fā)發(fā)度度,通通常常采采取取死死鎖鎖檢檢測(cè)測(cè)的的方方法法。解解決決可可串串行行化化調(diào)調(diào)度度問(wèn)問(wèn)題題最最常常用用的的方方法法是是兩兩段段鎖鎖協(xié)協(xié)議議。為為提提高高多多粒粒度度封封鎖鎖的的效效率率可可引引進(jìn)進(jìn)意意向向鎖鎖。如如果果對(duì)對(duì)一一個(gè)個(gè)結(jié)結(jié)點(diǎn)點(diǎn)加加意意向向鎖鎖,則則說(shuō)說(shuō)明明該該結(jié)結(jié)點(diǎn)點(diǎn)的的下下層層結(jié)結(jié)點(diǎn)點(diǎn)正正在在被被加加鎖鎖。對(duì)對(duì)任任一一結(jié)結(jié)點(diǎn)點(diǎn)加鎖時(shí),必須先對(duì)它的上層結(jié)點(diǎn)加意向鎖。加鎖時(shí),必須先對(duì)它的上層結(jié)點(diǎn)加意向鎖。思 考 練 習(xí)1.1.試述試述DBMSDBMS中采用并發(fā)控制的目的。中采用并發(fā)控制的目的。2.2.試述共享鎖和排他鎖的含義。試述共享鎖和排他鎖的含義。3.3.試述死鎖是如何產(chǎn)生的,列舉一些常見的預(yù)防死鎖的方法。試述死鎖是如何產(chǎn)生的,列舉一些常見的預(yù)防死鎖的方法。4.4.簡(jiǎn)述數(shù)據(jù)庫(kù)系統(tǒng)中經(jīng)常用到檢測(cè)和解除死鎖的方法。簡(jiǎn)述數(shù)據(jù)庫(kù)系統(tǒng)中經(jīng)常用到檢測(cè)和解除死鎖的方法。5.5.簡(jiǎn)述多粒度封鎖的含義以及優(yōu)點(diǎn)。簡(jiǎn)述多粒度封鎖的含義以及優(yōu)點(diǎn)。6.6.試述意向鎖的含義,簡(jiǎn)要介紹幾種常見的意向鎖。試述意向鎖的含義,簡(jiǎn)要介紹幾種常見的意向鎖。
收藏
編號(hào):48760729
類型:共享資源
大?。?span id="ievbyqtbdd" class="font-tahoma">10.02MB
格式:ZIP
上傳時(shí)間:2022-01-14
30
積分
- 關(guān) 鍵 詞:
-
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用
數(shù)據(jù)庫(kù)技術(shù)
應(yīng)用
電子
課件
- 資源描述:
-
《數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用》電子課件,數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用,數(shù)據(jù)庫(kù)技術(shù),應(yīng)用,電子,課件
展開閱讀全文
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。
裝配圖網(wǎng)所有資源均是用戶自行上傳分享,僅供網(wǎng)友學(xué)習(xí)交流,未經(jīng)上傳用戶書面授權(quán),請(qǐng)勿作他用。