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

下載本文檔

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

文檔簡(jiǎn)介

第7章數(shù)據(jù)庫(kù)并發(fā)控制主要內(nèi)容7.1并發(fā)控制概述7.2封鎖7.3封鎖協(xié)議7.4活鎖和死鎖7.5并發(fā)調(diào)度的可串行性7.6兩段鎖協(xié)議7.7鎖的粒度7.8并發(fā)控制的時(shí)間戳方法7.9本章小結(jié)7.1并發(fā)控制概述

第7章數(shù)據(jù)庫(kù)并發(fā)控制7.1并發(fā)控制概述7.1并發(fā)控制概述允許多個(gè)用戶同時(shí)使用的數(shù)據(jù)庫(kù)系統(tǒng)稱為多用戶數(shù)據(jù)庫(kù)系統(tǒng)。例如飛機(jī)訂票數(shù)據(jù)庫(kù)系統(tǒng)、銀行數(shù)據(jù)庫(kù)系統(tǒng)等都是多用戶數(shù)據(jù)庫(kù)系統(tǒng)。在這樣的系統(tǒng)中,在同一時(shí)刻并發(fā)運(yùn)行的事務(wù)數(shù)可達(dá)數(shù)百個(gè)。事務(wù)可以一個(gè)一個(gè)地串行執(zhí)行,即每個(gè)時(shí)刻只有一個(gè)事務(wù)運(yùn)行,其他事務(wù)必須等到這個(gè)事務(wù)結(jié)束以后方能運(yùn)行。事務(wù)在執(zhí)行過程中需要不同的資源,有時(shí)需要CPU,有時(shí)需要存取數(shù)據(jù)庫(kù),有時(shí)需要I/O,有時(shí)需要通信。如果事務(wù)串行執(zhí)行,則許多系統(tǒng)資源將處于空閑狀態(tài)。因此,為了充分利用系統(tǒng)資源發(fā)揮數(shù)據(jù)庫(kù)共享資源的特點(diǎn),應(yīng)該允許多個(gè)事務(wù)并行地執(zhí)行。47.1并發(fā)控制概述例題7.1設(shè)T1,T2,T3是如下三個(gè)事務(wù),其中R為數(shù)據(jù)庫(kù)中某個(gè)數(shù)據(jù)項(xiàng),設(shè)R的初值為0。T1:R:=R+5

T2:R:=R*3

T3:R:=2若允許三個(gè)事務(wù)并行執(zhí)行,試列出所有可能的正確結(jié)果。例題解析:有6種可能的情況(1)T1-T2-T3:R=2(2)T1-T3-T2:R=6(3)T2-T1-T3:R=2(4)T2-T3-T1:R=7(5)T3-T1-T2:R=21(6)T3-T2-T1:R=115事務(wù)并發(fā)執(zhí)行帶來的問題:會(huì)產(chǎn)生多個(gè)事務(wù)同時(shí)存取同一數(shù)據(jù)的情況;可能會(huì)存取和存儲(chǔ)不正確的數(shù)據(jù),破壞事務(wù)一致性和數(shù)據(jù)庫(kù)的一致性。下面看一個(gè)實(shí)例,說明并發(fā)操作帶來的數(shù)據(jù)不一致問題:例題7.2飛機(jī)訂票系統(tǒng)中的一個(gè)活動(dòng)序列

1.甲售票點(diǎn)(甲事務(wù))讀出某航班的機(jī)票余額A,設(shè)A=100;2.乙售票點(diǎn)(乙事務(wù))讀出同一航班的機(jī)票余額A,也為100;3.甲售票點(diǎn)賣出十張機(jī)票,修改余額A←A-10,所以A為90,把A寫回?cái)?shù)據(jù)庫(kù);4.乙售票點(diǎn)也賣出十張機(jī)票,修改余額A←A-10,所以A為90,把A寫回?cái)?shù)據(jù)庫(kù)。6結(jié)果明明賣出二十張機(jī)票,數(shù)據(jù)庫(kù)中機(jī)票余額只減少10。這種情況稱為數(shù)據(jù)這種情況稱為數(shù)據(jù)庫(kù)的不一致性,是由并發(fā)操作引起的。在并發(fā)操作情況下,對(duì)甲、乙兩個(gè)事務(wù)的操作序列的調(diào)度是隨機(jī)的。若按上面的調(diào)度序列執(zhí)行,甲事務(wù)的修改就被丟失。原因:第4步中乙事務(wù)修改A并寫回后覆蓋了甲事務(wù)的修改。當(dāng)并發(fā)事物以不受控制的方式進(jìn)行執(zhí)行時(shí),可能會(huì)出現(xiàn)一些問題。并發(fā)操作帶來的數(shù)據(jù)不一致性包括三類:丟失更新問題(LostUpdate),不可重復(fù)讀問題(Non-repeatableRead)和讀“臟”數(shù)據(jù)問題(DirtyRead)。77.1.1丟失更新問題當(dāng)兩個(gè)事物訪問相同的數(shù)據(jù)庫(kù)項(xiàng)時(shí)就會(huì)出現(xiàn)丟失更新的問題,使得某些數(shù)據(jù)庫(kù)項(xiàng)的值會(huì)不正確。換句話說,如果事務(wù)T1和事務(wù)T2都是先讀一條記錄,然后進(jìn)行修改,那么第一個(gè)更新的影響將被第二個(gè)更新所覆蓋。上面的例題7.2飛機(jī)訂票的例子就屬此類。8表7.1說明了有丟失更新問題發(fā)生的執(zhí)行順序,從這個(gè)表中可以觀察到,當(dāng)?shù)诙€(gè)事務(wù)T2開始讀取A的值時(shí),第一個(gè)事務(wù)T1還沒有提交。因此,事務(wù)T2仍然是在A=100這個(gè)值上進(jìn)行操作,得到結(jié)果A=90。同時(shí),事務(wù)T1將A=90這個(gè)值寫回到磁盤存儲(chǔ)中,這樣它就立即被事務(wù)T2重寫了。因此,在整個(gè)過程中丟失了賣出10張票。97.1.2不可重復(fù)讀問題當(dāng)某個(gè)事務(wù)在一些數(shù)據(jù)集上計(jì)算一些匯總(集合)函數(shù),而其他的事務(wù)正在修改這些數(shù)據(jù)時(shí)就會(huì)出現(xiàn)不可重復(fù)讀(或者更新不一致的檢索)問題。這個(gè)問題是事務(wù)可能在一些數(shù)據(jù)被更改之前讀取而另一些數(shù)據(jù)是在被更改之后讀取,因此產(chǎn)生了不一致的結(jié)果。在不可重復(fù)讀中,事務(wù)T1讀取一個(gè)記錄,然后在事務(wù)T2更改這個(gè)記錄時(shí)進(jìn)行一些其他的處理。現(xiàn)在,如果事物T1重新讀取這個(gè)記錄,則新的值將和之前的值不一致。10不可重復(fù)讀包括三種情況:(1)事務(wù)T1讀取某一數(shù)據(jù)后,事務(wù)T2對(duì)其做了修改,當(dāng)事務(wù)T1再次讀該數(shù)據(jù)時(shí),得到與前一次不同的值。(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)象(PhantomRow)。11127.1.3讀“臟”數(shù)據(jù)問題當(dāng)一個(gè)事務(wù)修改數(shù)據(jù)庫(kù)項(xiàng),卻由于某些原因使得事務(wù)失敗了,而被修改的數(shù)據(jù)庫(kù)項(xiàng)在被修改回原來的原始值之前又被其他的事務(wù)訪問了,這是就會(huì)出現(xiàn)讀“臟”數(shù)據(jù)的問題。也就是說,事務(wù)T1修改某一數(shù)據(jù),并將其寫回磁盤,事務(wù)T2讀取同一數(shù)據(jù)后,T1由于某種原因被撤銷,這時(shí)T1已修改過的數(shù)據(jù)恢復(fù)原值,T2讀到的數(shù)據(jù)就與數(shù)據(jù)庫(kù)中的數(shù)據(jù)不一致,T2讀到的數(shù)據(jù)就為“臟”數(shù)據(jù),即不正確的數(shù)據(jù)。13147.2封鎖

第7章數(shù)據(jù)庫(kù)并發(fā)控制7.2封鎖封鎖是并發(fā)控制中的加鎖方法,是實(shí)現(xiàn)并發(fā)控制的一個(gè)非常重要的技術(shù)。鎖是與數(shù)據(jù)項(xiàng)有關(guān)的一個(gè)變量,它描述了數(shù)據(jù)項(xiàng)的狀態(tài),這個(gè)狀態(tài)反映了在數(shù)據(jù)項(xiàng)上可進(jìn)行的操作。它防止第二個(gè)事務(wù)在第一個(gè)事務(wù)完成它全部活動(dòng)之前,對(duì)數(shù)據(jù)庫(kù)記錄進(jìn)行訪問。打個(gè)比方,事務(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ì)象。通常,在數(shù)據(jù)庫(kù)中每個(gè)數(shù)據(jù)項(xiàng)都有一個(gè)鎖。鎖作為同步化并發(fā)事務(wù)對(duì)數(shù)據(jù)庫(kù)訪問的一種手段而被廣泛使用。因此,封鎖模式用于允許并發(fā)執(zhí)行兼容的操作。換句話說,可交換的活動(dòng)是兼容的。封鎖是并發(fā)控制最常使用的形式,而且它也是大多數(shù)應(yīng)用程序所選擇的方法。167.2封鎖基本的封鎖類型有兩種:排他鎖(ExclusiveLocks,簡(jiǎn)稱X鎖,也稱寫鎖)和共享鎖(ShareLocks,簡(jiǎn)稱S鎖,也稱讀鎖)。排他鎖又稱為寫鎖。若事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加上X鎖,則只允許T讀取和修改A,其他任何事務(wù)都不能再對(duì)A加任何類型的鎖,直到T釋放A上的鎖。這就保證了其他事務(wù)在T釋放A上的鎖之前不能再讀取和修改A。

共享鎖又稱為讀鎖。若事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加上S鎖,則事務(wù)T可以讀A但不能修改A,其他事務(wù)只能再對(duì)A加S鎖,而不能加X鎖,直到T釋放A上的S鎖。這就保證了其他事務(wù)可以讀A,但在T釋放A上的S鎖之前不能對(duì)A做任何修改。177.2封鎖在鎖的相容矩陣中,如表7.4所示,最左邊一列表示事務(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)求被拒絕。187.3封鎖協(xié)議在運(yùn)用X鎖和S鎖這兩種基本鎖對(duì)數(shù)據(jù)對(duì)象加鎖時(shí),還需要約定一些規(guī)則,例如何時(shí)申請(qǐng)X鎖或S鎖、持鎖時(shí)間、何時(shí)釋放等。這些規(guī)則被稱為封鎖協(xié)議(LockingProtocol)。對(duì)封鎖方式規(guī)定不同的規(guī)則,就形成了各種不同的封鎖協(xié)議。下面介紹三級(jí)封鎖協(xié)議。197.3封鎖協(xié)議7.3.1一級(jí)封鎖協(xié)議一級(jí)封鎖協(xié)議是:事務(wù)T在修改數(shù)據(jù)R之前必須先對(duì)其加X鎖,直到事務(wù)結(jié)束才釋放。事務(wù)結(jié)束包括正常結(jié)束(COMMIT)和非正常結(jié)束(ROLLBACK)。一級(jí)封鎖協(xié)議可防止丟失修改,并保證事務(wù)T是可恢復(fù)的。在一級(jí)封鎖協(xié)議中,如果僅僅是讀數(shù)據(jù)不對(duì)其進(jìn)行修改,是不需要加鎖的,所以它不能保證可重復(fù)讀和不讀“臟”數(shù)據(jù)。207.3封鎖協(xié)議7.3.2二級(jí)封鎖協(xié)議二級(jí)封鎖協(xié)議是:在一級(jí)封鎖協(xié)議基礎(chǔ)上,事務(wù)T在讀取數(shù)據(jù)R之前必須先對(duì)其加S鎖,讀完后即可釋放S鎖。二級(jí)封鎖協(xié)議除防止了丟失修改,還可進(jìn)一步防止讀“臟”數(shù)據(jù)。在二級(jí)封鎖協(xié)議中,由于讀完數(shù)據(jù)后即可釋放S鎖,所以它不能保證可重復(fù)讀。217.3封鎖協(xié)議7.3.3三級(jí)封鎖協(xié)議三級(jí)封鎖協(xié)議是:在一級(jí)封鎖協(xié)議基礎(chǔ)上,事務(wù)T在讀取數(shù)據(jù)R之前必須先對(duì)其加S鎖,直到事務(wù)結(jié)束才釋放。三級(jí)封鎖協(xié)議除防止了丟失修改和讀“臟”數(shù)據(jù)外,還進(jìn)一步防止了不可重復(fù)讀。上述三級(jí)協(xié)議的主要區(qū)別在于什么操作需要申請(qǐng)封鎖,以及何時(shí)釋放鎖(即持鎖時(shí)間)。227.3封鎖協(xié)議237.4活鎖和死鎖

第7章數(shù)據(jù)庫(kù)并發(fā)控制7.4活鎖和死鎖和操作系統(tǒng)一樣,封鎖的方法可能引起活鎖和死鎖。死鎖(DeadLock)和活鎖(LiveLock)是并發(fā)應(yīng)用程序經(jīng)常發(fā)生的問題,也是多線程編程中的重要概念。以下是對(duì)死鎖和活鎖的形象描述。

現(xiàn)有一條路,兩個(gè)人寬,從兩個(gè)相對(duì)的方向迎面走來兩個(gè)人A和B。

死鎖的情況:A和B兩個(gè)人都不愿意給對(duì)方讓路,所以A和B都在等對(duì)方先讓路,導(dǎo)致誰也過不去。

活鎖的情況:A和B兩個(gè)人都主動(dòng)給別人讓路。A往左移,同時(shí)B往右移;A往右移,同時(shí)B往左移。A和B在移動(dòng)的時(shí)候,同時(shí)擋住對(duì)方,導(dǎo)致誰也過不去。

257.4活鎖和死鎖7.4.1活鎖如果事務(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)等待,這就是活鎖(LiveLock)的情形,如表7.5所示。267.4活鎖和死鎖277.4活鎖和死鎖避免活鎖的簡(jiǎn)單方法是采用先來先服務(wù)的策略。當(dāng)多個(gè)事務(wù)請(qǐng)求封鎖同一數(shù)據(jù)對(duì)象時(shí),封鎖子系統(tǒng)按請(qǐng)求封鎖的先后次序?qū)κ聞?wù)排隊(duì),數(shù)據(jù)對(duì)象上的鎖一旦釋放就批準(zhǔn)申請(qǐng)隊(duì)列中第一個(gè)事務(wù)獲得鎖。287.4活鎖和死鎖7.4.2死鎖死鎖(DeadLock)是集合中的兩個(gè)(或多個(gè))事務(wù)同時(shí)等待集合中的其他事務(wù)釋放鎖的情況。所有的事務(wù)都不能繼續(xù)執(zhí)行了,因?yàn)榧现械拿總€(gè)事務(wù)都在一個(gè)等待隊(duì)列中,等待集合中的一個(gè)其他事物釋放數(shù)據(jù)項(xiàng)上的鎖。297.4活鎖和死鎖307.4活鎖和死鎖如表7.7所示:如果事務(wù)T1封鎖了數(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上的鎖。這樣就出現(xiàn)了T1在等待T2,而T2又在等待T1的局面,T1和T2兩個(gè)事務(wù)永遠(yuǎn)不能結(jié)束,形成死鎖。死鎖也成為循環(huán)等待情形,這里兩個(gè)事物互相等待(直接或間接)資源。因此在死鎖中,兩個(gè)事物互相排斥訪問下一個(gè)所需的記錄來完成它們的事務(wù),也稱為死亡擁抱(DeadlyEmbrace)。317.4活鎖和死鎖7.5.3死鎖的檢測(cè)和預(yù)防死鎖檢測(cè)是由DBMS實(shí)現(xiàn)的一個(gè)定期檢測(cè),以確定是否由于某些原因使得事務(wù)的等待時(shí)間超過了預(yù)定限制的情況。死鎖出現(xiàn)的頻率主要與查詢負(fù)荷以及數(shù)據(jù)庫(kù)的物理組織有關(guān)。為了計(jì)算死鎖的發(fā)生頻率,Gray在1981年提出了每秒產(chǎn)生的死鎖是多個(gè)程序的個(gè)數(shù)的平方和事務(wù)大小的四次方的論斷。檢測(cè)和預(yù)防死鎖的基本模式有如下三種:(1)從不允許死鎖發(fā)生(死鎖預(yù)防)(2)當(dāng)某事物被阻塞時(shí)檢測(cè)死鎖(死鎖檢測(cè))(3)定期地檢查死鎖(死鎖避免)327.5并發(fā)調(diào)度的可串行性

第7章數(shù)據(jù)庫(kù)并發(fā)控制7.5并發(fā)調(diào)度的可串行性定義:多個(gè)事務(wù)的并發(fā)執(zhí)行是正確的,當(dāng)且僅當(dāng)其結(jié)果與按某一次序串行地執(zhí)行它們時(shí)的結(jié)果相同,我們稱這種調(diào)度策略為可串行化(Serializable)的調(diào)度??纱行裕⊿erializability)是并發(fā)事務(wù)正確性的準(zhǔn)則。按這個(gè)準(zhǔn)則規(guī)定,一個(gè)給定的并發(fā)調(diào)度,當(dāng)且僅當(dāng)它是可串行化的,才認(rèn)為是正確調(diào)度。為了保證并發(fā)操作的正確性,DBMS的并發(fā)控制機(jī)制必須提供一定的手段來保證調(diào)度是可串行化的。347.5并發(fā)調(diào)度的可串行性從理論上講,在某一事務(wù)執(zhí)行時(shí)禁止其他事務(wù)執(zhí)行的調(diào)度策略一定是可串行化的調(diào)度,這也是最簡(jiǎn)單的調(diào)度策略。但這種方法實(shí)際上是不可取的,因?yàn)樗沟糜脩舨荒艹浞止蚕頂?shù)據(jù)庫(kù)資源。目前DBMS普遍采用封鎖方法實(shí)現(xiàn)并發(fā)操作調(diào)度的可串行性,從而保證調(diào)度的正確性。兩段鎖(Two-PhaseLocking,簡(jiǎn)稱2PL)協(xié)議就是保證并發(fā)調(diào)度可串行性的封鎖協(xié)議。除此之外還有其他一些方法,如時(shí)間方法、樂觀方法等來保證調(diào)度的正確性。357.6兩段鎖協(xié)議

第7章數(shù)據(jù)庫(kù)并發(fā)控制7.6兩段鎖協(xié)議兩段鎖協(xié)議(Two-PhaseLocking,簡(jiǎn)稱2PL)是控制并發(fā)處理的一個(gè)方法或一個(gè)協(xié)議。在兩段鎖中,所有的封鎖操作都在第一個(gè)解鎖操作之前。因此,如果事務(wù)中的所有加鎖操作(比如read_lock、write_lock)都在第一個(gè)解鎖操作之前,則稱此事務(wù)是遵循兩段鎖協(xié)議的。所謂兩段鎖協(xié)議是指所有事務(wù)必須分兩個(gè)階段對(duì)數(shù)據(jù)項(xiàng)加鎖和解鎖。在對(duì)任何數(shù)據(jù)進(jìn)行讀、寫操作之前,首先要申請(qǐng)并獲得對(duì)該數(shù)據(jù)的封鎖;在釋放一個(gè)封鎖之后,事務(wù)不再申請(qǐng)和獲得任何其他封鎖。377.6兩段鎖協(xié)議事務(wù)分為兩個(gè)階段,第一階段是獲得封鎖,也稱為增長(zhǎng)階段,在這個(gè)階段事務(wù)獲得所有需要的鎖而不釋放任何數(shù)據(jù)上的鎖。一旦獲得了所有的鎖,事務(wù)就處在它的鎖定點(diǎn)。第二階段是釋放封鎖,也稱為收縮階段,在這個(gè)階段事務(wù)釋放全部的鎖,并且不能再獲得任何新鎖。2PL的兩個(gè)階段如圖7.3所示:387.6兩段鎖協(xié)議397.6兩段鎖協(xié)議上述兩階段鎖有下述規(guī)則保證:(1)兩個(gè)事務(wù)不能有沖突的鎖。(2)在同一個(gè)事務(wù)中,任何解鎖操作都不能在加鎖操作之前。(3)在獲得所有的鎖之前不影響任何數(shù)據(jù),即在事務(wù)處于它的鎖定點(diǎn)時(shí)才能影響數(shù)據(jù)。圖7.3說明了兩段鎖的示意圖,在嚴(yán)格的兩階段鎖中不允許有交叉。407.7鎖的粒度

第7章數(shù)據(jù)庫(kù)并發(fā)控制7.7鎖的粒度數(shù)據(jù)庫(kù)基本上是作為命名的數(shù)據(jù)項(xiàng)的集合,由并發(fā)控制程序選擇的作為保護(hù)單位的數(shù)據(jù)項(xiàng)的大小稱為粒度(Granularity)。封鎖對(duì)象可以是邏輯單元,也可以是物理單元。粒度是由并發(fā)控制子系統(tǒng)控制的獨(dú)立的數(shù)據(jù)單位,在基于鎖的并發(fā)控制機(jī)制中,粒度是一個(gè)可加鎖單位。鎖的粒度表明加鎖使用的級(jí)別。在最通常的情況下,鎖的粒度是數(shù)據(jù)頁(yè)。大多數(shù)商業(yè)數(shù)據(jù)庫(kù)系統(tǒng)都提供了不同的加鎖粒度。加鎖可以發(fā)生在下述級(jí)別上:數(shù)據(jù)庫(kù)級(jí)

表級(jí)頁(yè)級(jí)行(元組)級(jí)屬性(字段)級(jí)427.7鎖的粒度1.?dāng)?shù)據(jù)庫(kù)級(jí)鎖在數(shù)據(jù)庫(kù)級(jí)鎖上,整個(gè)數(shù)據(jù)庫(kù)被加鎖。因此,在事務(wù)T1執(zhí)行期間拒絕事務(wù)T2使用數(shù)據(jù)庫(kù)中的任何表。2.表級(jí)鎖在表級(jí)鎖上,對(duì)整個(gè)表進(jìn)行加鎖。因此,在事務(wù)T1使用這個(gè)表時(shí)拒絕事務(wù)T2訪問表中的任何行(元組)。如果某個(gè)事務(wù)希望訪問一些表,則每個(gè)表都被加鎖。但兩個(gè)事物可以訪問相同的數(shù)據(jù)庫(kù),只要它們?cè)L問的表不同即可。表級(jí)鎖的限制比數(shù)據(jù)庫(kù)級(jí)鎖少,但當(dāng)有很多事務(wù)等待訪問相同的表時(shí)會(huì)引起阻塞,尤其是當(dāng)事務(wù)需要訪問相同表的不同部分而且彼此沒有相互干擾時(shí),這個(gè)條件就成為一個(gè)問題。表級(jí)鎖不適合多用戶DBMS。437.7鎖的粒度3.頁(yè)級(jí)鎖在頁(yè)級(jí)鎖上,整個(gè)磁盤頁(yè)(或磁盤塊)被加鎖。一個(gè)表能夠跨多個(gè)頁(yè),而一個(gè)頁(yè)也可以包含一個(gè)或者多個(gè)表的若干行(元組)。頁(yè)級(jí)鎖最適合多用戶DBMS。4.行級(jí)鎖在行級(jí)鎖上,對(duì)特定的行(或元組)進(jìn)行加鎖,對(duì)數(shù)據(jù)庫(kù)中的每個(gè)表的每一行進(jìn)行加鎖。DBMS允許并發(fā)事務(wù)訪問同一個(gè)表的不同行,即使這些行位于相同的頁(yè)上。行級(jí)鎖比數(shù)據(jù)庫(kù)級(jí)鎖、表級(jí)鎖或頁(yè)級(jí)鎖的限制要少很多,行級(jí)鎖提高了數(shù)據(jù)的可獲得性,但是對(duì)于行級(jí)鎖的管理需要很高的成本。5.屬性(或字段)級(jí)鎖在屬性級(jí)鎖上,對(duì)特定的屬性(或字段)進(jìn)行加鎖。屬性級(jí)鎖允許并發(fā)事務(wù)訪問相同的行,只要這些事務(wù)是訪問行中的不同屬性即可。屬性集鎖為多用戶數(shù)據(jù)訪問產(chǎn)生了最大的靈活性,但它需要很高的系統(tǒng)開銷。447.8并發(fā)控制的時(shí)間戳方法

第7章數(shù)據(jù)庫(kù)并發(fā)控制7.8并發(fā)控制的時(shí)間戳方法時(shí)間戳是由DBMS創(chuàng)建的唯一標(biāo)識(shí)符,用于表示事務(wù)的相對(duì)啟動(dòng)時(shí)間。時(shí)間戳可以看成是事務(wù)的啟動(dòng)時(shí)間。由此,時(shí)間戳是并發(fā)控制的一個(gè)方法,在這個(gè)方法中,每個(gè)事務(wù)被賦予一個(gè)事務(wù)時(shí)間戳。事務(wù)時(shí)間戳是一個(gè)單調(diào)增長(zhǎng)的數(shù)字,它通常是基于系統(tǒng)時(shí)鐘的。事務(wù)被管理成按時(shí)間戳順序進(jìn)行,時(shí)間戳也可以通過每當(dāng)新事務(wù)啟動(dòng)時(shí)增加一個(gè)局部計(jì)數(shù)器的方法產(chǎn)生,時(shí)間戳的值產(chǎn)生一個(gè)顯式的順序,這個(gè)順序是事務(wù)提交給DBMS的順序。時(shí)間戳必須有兩個(gè)性質(zhì),即唯一性和單調(diào)性。唯一性假設(shè)不存在相同的時(shí)間戳值,單調(diào)性假設(shè)時(shí)間戳值總是增加的。在相同事務(wù)中對(duì)數(shù)據(jù)庫(kù)的Read和Write操作必須有相同的時(shí)間戳。DBMS按時(shí)間戳順序執(zhí)行沖突操作,因此確保了事務(wù)的可串行性。如果兩個(gè)事物沖突了,則通常是停止一個(gè)事務(wù),重新調(diào)度這個(gè)事務(wù)并賦予一個(gè)新的時(shí)間戳值。467.8并發(fā)控制的時(shí)間戳方法1.粒度時(shí)間戳粒度時(shí)間戳是最后一個(gè)事務(wù)訪問它的時(shí)間戳的一個(gè)記錄,一個(gè)活動(dòng)事務(wù)訪問的每個(gè)粒度必須有一個(gè)粒度時(shí)間戳??梢员A糇詈笠粋€(gè)讀和寫訪問的每個(gè)記錄。如果它們的存儲(chǔ)包括粒度,粒度時(shí)間戳可能對(duì)讀訪問引起額外的寫操作。粒度時(shí)間戳表中的每一項(xiàng)由粒度標(biāo)識(shí)符和事物時(shí)間戳組成,同時(shí)維護(hù)從表中刪除的包含最大(最近的)粒度時(shí)間戳的記錄。對(duì)粒度時(shí)間戳的查找可以使用粒度標(biāo)識(shí)符,也可以使用最大被刪除的時(shí)間戳。477.8并發(fā)控制的時(shí)間戳方法2.時(shí)間戳排序下述是基于時(shí)間戳的并發(fā)控制方法中的三個(gè)基本算法:(1)總時(shí)間戳排序總時(shí)間戳排序算法依賴于在時(shí)間戳排序中對(duì)訪問粒度的維護(hù),他是在沖突訪問中終止一個(gè)事務(wù)。讀和寫的訪問之間沒有區(qū)別。因此,對(duì)每個(gè)粒度時(shí)間戳來說只需要一個(gè)值。(2)部分時(shí)間戳排序只排序不可交換的活動(dòng)來提高總的時(shí)間戳排序。在這種情況下,同時(shí)存儲(chǔ)讀和寫粒度時(shí)間戳。這個(gè)算法允許比最后一個(gè)更改粒度的事務(wù)晚的任何事務(wù)讀取粒度。如果某個(gè)事務(wù)試圖更改之前已經(jīng)被事務(wù)訪問的粒度,則終止此事務(wù)。部分時(shí)間戳排序算法比總時(shí)間戳排序算法終止的事務(wù)少,但是其代價(jià)是需要存儲(chǔ)粒度時(shí)間戳的額外空間。487.8并發(fā)控制的時(shí)間戳方法(3)多版本時(shí)間戳排序此算法存儲(chǔ)幾個(gè)被更改粒度的版本,允許事務(wù)為它訪問的所有粒度查看一致的版本集合。因此,這個(gè)算法降低了重新啟動(dòng)那些有寫—寫沖突的事務(wù)而產(chǎn)生的沖突。每次對(duì)粒度的更新都創(chuàng)建一個(gè)新的版本,這個(gè)版本包含相關(guān)的粒度時(shí)間戳。因此,多版本的時(shí)間戳等于或只剛剛小于此事務(wù)的時(shí)間戳。497.8并發(fā)控制的時(shí)間戳方法3.解決時(shí)間戳中的沖突為處理時(shí)間戳算法中的沖突,讓包含在沖突中的一些事務(wù)等待并

溫馨提示

  • 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)論