數(shù)據(jù)庫(kù)原理與開(kāi)發(fā)技術(shù) 課件 7.2 數(shù)據(jù)庫(kù)并發(fā)控制_第1頁(yè)
數(shù)據(jù)庫(kù)原理與開(kāi)發(fā)技術(shù) 課件 7.2 數(shù)據(jù)庫(kù)并發(fā)控制_第2頁(yè)
數(shù)據(jù)庫(kù)原理與開(kāi)發(fā)技術(shù) 課件 7.2 數(shù)據(jù)庫(kù)并發(fā)控制_第3頁(yè)
數(shù)據(jù)庫(kù)原理與開(kāi)發(fā)技術(shù) 課件 7.2 數(shù)據(jù)庫(kù)并發(fā)控制_第4頁(yè)
數(shù)據(jù)庫(kù)原理與開(kāi)發(fā)技術(shù) 課件 7.2 數(shù)據(jù)庫(kù)并發(fā)控制_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

7.2數(shù)據(jù)庫(kù)并發(fā)控制本章主要內(nèi)容:(1)事務(wù):事務(wù)的概念、事務(wù)的ACID性質(zhì)、事務(wù)的狀態(tài)變遷圖(2)數(shù)據(jù)科的并發(fā)控制:并發(fā)操作產(chǎn)生的3類問(wèn)題、鎖(3)數(shù)據(jù)庫(kù)的恢復(fù)技術(shù):重復(fù)存儲(chǔ)、寫日志(4)數(shù)據(jù)庫(kù)的完整性控制:數(shù)據(jù)的正確性、有效性和相容性(5)數(shù)據(jù)庫(kù)的安全性控制:合法用法的授權(quán)訪問(wèn)7.2數(shù)據(jù)庫(kù)并發(fā)控制數(shù)據(jù)庫(kù)的并發(fā)與操作系統(tǒng)的并發(fā),兩個(gè)概念是有區(qū)別的。在計(jì)算機(jī)操作系統(tǒng)中,進(jìn)程(Process)是指內(nèi)存中正在運(yùn)行的程序。而并發(fā),是指在同一時(shí)間段里,一個(gè)CPU執(zhí)行多個(gè)進(jìn)程。一個(gè)進(jìn)程可以分出不同的時(shí)間片、執(zhí)行不同的任務(wù),這就是線程(Thread),線程是操作系統(tǒng)能夠進(jìn)行運(yùn)算調(diào)度的最小邏輯單位。

DBMS屬于多用戶、共享系統(tǒng),許多事務(wù)可能在同一時(shí)間對(duì)同一數(shù)據(jù)進(jìn)行操作,這就是“并發(fā)操作”。例如,網(wǎng)上火車票售票系統(tǒng),如果不加以控制,很多人就會(huì)搶購(gòu)到同一個(gè)座位號(hào)的火車票。DBMS的并發(fā)控制子系統(tǒng),就是負(fù)責(zé)協(xié)調(diào)并發(fā)事務(wù)執(zhí)行的,它可保證數(shù)據(jù)庫(kù)的完整性,同時(shí)避免用戶得到不正確的數(shù)據(jù)。

7.2.1并發(fā)操作帶來(lái)的3個(gè)問(wèn)題數(shù)據(jù)庫(kù)的并發(fā)操作,如果不加以控制,可能會(huì)導(dǎo)致下面3個(gè)問(wèn)題。

1.丟失更新假設(shè)有2人同時(shí)在網(wǎng)上購(gòu)買同一車次的火車票,甲讀出該列車當(dāng)前售出的最大票序號(hào)為80(記為事務(wù)T1),乙讀出該列車當(dāng)前售出的最大票序號(hào)也為80(記為事務(wù)T2)。甲開(kāi)始購(gòu)買下一張票,票號(hào)為81,并將已售出的最大票序號(hào)更新為81;此時(shí),乙也開(kāi)始購(gòu)買下一張票,票號(hào)為81,并將已售出的最大票序號(hào)更新為81。兩個(gè)事務(wù)同時(shí)讀取售出的最大票號(hào)并進(jìn)行更新,由于沒(méi)有加以控制,導(dǎo)致事務(wù)T1的更新被丟失了,結(jié)果是2人購(gòu)買了同一個(gè)座位號(hào)。如圖7-3(a)所示。

7.2.1并發(fā)操作帶來(lái)的3個(gè)問(wèn)題

2.不可重復(fù)讀假設(shè)有2個(gè)事務(wù)T1、T2都要操作數(shù)據(jù)項(xiàng)A,T1是將A加10,T2是分別將數(shù)據(jù)項(xiàng)A的值加到數(shù)據(jù)項(xiàng)B、C上。由于緩沖區(qū)空間有限,T2需要分2次讀取A的值。當(dāng)T2第二次讀取數(shù)據(jù)項(xiàng)A的值時(shí),A的值已經(jīng)被修改了。人們把這種問(wèn)題,稱為不可重復(fù)讀。兩個(gè)事務(wù)的運(yùn)行時(shí)序如圖7-3(b)所示。

3.讀“臟”數(shù)據(jù)假設(shè)事務(wù)T1修改了數(shù)據(jù)項(xiàng)A的值并寫回了磁盤,事務(wù)T2讀取了A的值后,由于某種原因T1要被撤銷,它修改的值要恢復(fù)原值,這樣T2讀取的數(shù)據(jù)A就與數(shù)據(jù)庫(kù)中的數(shù)據(jù)不一致,這時(shí)人們就稱T2讀到的數(shù)據(jù)為“臟”數(shù)據(jù)。如圖7-3(c)所示。

7.2.1并發(fā)操作帶來(lái)的3個(gè)問(wèn)題產(chǎn)生上述3類問(wèn)題的主要原因是并發(fā)操作破壞了事務(wù)的隔離性。并發(fā)控制機(jī)制就是要采用正確的方式調(diào)度并發(fā)操作,使一個(gè)事務(wù)的執(zhí)行不受其他事務(wù)的干擾,從而避免造成數(shù)據(jù)的不一致。時(shí)序事務(wù)T1事務(wù)T2時(shí)序事務(wù)T1事務(wù)T2時(shí)序事務(wù)T1事務(wù)T2t0Read(A)t0Read(A)t0Read(A)t1Read(A)t1Read(A)A=A*2A=A+1A=A+10t1Write(A)t2Write(A)t2Write(A)t2Read(A)A=A+1t3Read(B)t3RollbackT1t3Write(A)B=B+At4Write(B)t5Read(A)t6Read(C)C=C+At7Write(C)(a)丟失更新

(b)不可重復(fù)讀

(c)讀“臟”數(shù)據(jù)

7.2.2并發(fā)調(diào)度的可串行化那么,什么樣的并發(fā)調(diào)度才是正確的?答案是可串行調(diào)度。事務(wù)的執(zhí)行次序稱為“調(diào)度”。如果多個(gè)事務(wù)依次執(zhí)行,則稱為事務(wù)的“串行調(diào)度”。如果利用分時(shí)的方法同時(shí)處理多個(gè)事務(wù),則稱為事務(wù)的“并發(fā)調(diào)度”。“串行調(diào)度”與“可串行調(diào)度”是兩個(gè)不同的概念。如果有n個(gè)事務(wù)并發(fā)調(diào)度,所有可能的并發(fā)調(diào)度總數(shù)遠(yuǎn)遠(yuǎn)大于n!。這其中,有的并發(fā)調(diào)度是正確的,有的并發(fā)調(diào)度是錯(cuò)誤的。

7.2.2并發(fā)調(diào)度的可串行化定義7-2多個(gè)事務(wù)的并行執(zhí)行是正確的,當(dāng)且僅當(dāng)其結(jié)果與按某一次序串行地執(zhí)行時(shí)的結(jié)果相同,這種調(diào)度策略稱為可串行化(serializable)的調(diào)度,否則稱為不可串行化的調(diào)度。在所有并發(fā)調(diào)度中,可串行化的調(diào)度是正確的,不可串行化的調(diào)度是錯(cuò)誤的。如果有n個(gè)事務(wù)并發(fā)調(diào)度,所有可能的并發(fā)調(diào)度總數(shù)遠(yuǎn)遠(yuǎn)大于n!。這其中,有的并發(fā)調(diào)度是正確的,有的并發(fā)調(diào)度是錯(cuò)誤的。

7.2.2并發(fā)調(diào)度的可串行化例7-2設(shè)數(shù)據(jù)項(xiàng)A的初始值為10,事務(wù)T1將A的值加8,事務(wù)T2將A的值乘以2。如果先T1,再T2,則A的結(jié)果為36;如果先T2,再T1,則A的結(jié)果為28,這2種串行調(diào)度都是正確的。如圖7-4(a)、7-4(b)所示的調(diào)度是可串行的,故結(jié)果是正確的。而圖7-4(c)所示的調(diào)度是不可串行的,故結(jié)果是錯(cuò)誤的。時(shí)序事務(wù)T1事務(wù)T2時(shí)序事務(wù)T1事務(wù)T2時(shí)序事務(wù)T1事務(wù)T2t0Read(A)t0Read(A)t0Read(A)A=A+8A=A*2t1Read(A)t1Write(A)t1Write(A)A=A+8t2Read(A)t2Read(A)t2Write(A)A=A*2A=A+8A=A*2t3Write(A)t3Write(A)t3Write(A)結(jié)果A=36結(jié)果A=28結(jié)果A=20(a)先T1,后T2,串行調(diào)度

(b)先T2,后T1,串行調(diào)度

(c)不可串行調(diào)度

7.2.4封鎖技術(shù)并發(fā)控制的主要方法是封鎖(Locking)。定義7-3鎖(lock)是一個(gè)與數(shù)據(jù)項(xiàng)相關(guān)的變量,對(duì)可能應(yīng)用于該數(shù)據(jù)項(xiàng)上的操作而言,鎖描述了該數(shù)據(jù)項(xiàng)的狀態(tài)。通常在數(shù)據(jù)庫(kù)中的每一個(gè)數(shù)據(jù)項(xiàng)都有一個(gè)鎖。封鎖就是事務(wù)T對(duì)某個(gè)數(shù)據(jù)項(xiàng)操作之前,先向系統(tǒng)發(fā)出請(qǐng)求,對(duì)其加鎖,加鎖后事務(wù)T就對(duì)該數(shù)據(jù)項(xiàng)有了某種控制,在事務(wù)T釋放它的鎖之前,其它的事務(wù)不能更新此數(shù)據(jù)項(xiàng)。

7.2.4封鎖技術(shù)

1.鎖的類型基本的封鎖類型有兩種:排他鎖(ExclusiveLocks,簡(jiǎn)稱X鎖)和共享鎖(ShareLocks,簡(jiǎn)稱S鎖)。定義7-4排他鎖又稱寫鎖。如果事務(wù)T對(duì)某個(gè)數(shù)據(jù)對(duì)象R(可以為數(shù)據(jù)項(xiàng)、記錄、數(shù)據(jù)表甚至整個(gè)數(shù)據(jù)庫(kù))加上了X鎖,則只允許事務(wù)T讀取和更新數(shù)據(jù)對(duì)象R,其它任何事務(wù)都不能再對(duì)R加任何類型的鎖,直到T釋放R上的鎖。定義7-5共享鎖又稱讀鎖。如果事務(wù)T對(duì)某個(gè)數(shù)據(jù)對(duì)象R加上了S鎖,則允許事務(wù)T讀取R上的數(shù)據(jù),但不能更新R上的數(shù)據(jù)。其它事務(wù)可以對(duì)R加S鎖,但不能加X(jué)的鎖。

7.2.4封鎖技術(shù)使用X鎖的操作有兩個(gè):(1)申請(qǐng)加X(jué)鎖操作:事務(wù)T對(duì)數(shù)據(jù)R進(jìn)行寫操作前,必須申請(qǐng)加X(jué)鎖成功。如果數(shù)據(jù)R當(dāng)前沒(méi)有任何鎖,則可直接加X(jué)鎖;如果數(shù)據(jù)R當(dāng)前有一把或多把S鎖、但沒(méi)有X鎖,則事務(wù)T先申請(qǐng)加上一把S鎖,然后等待R上所有別的S鎖全部釋放后,再將自己的S鎖升級(jí)為X鎖;如果數(shù)據(jù)R當(dāng)前有X鎖,則事務(wù)只能等待,直到該X鎖釋放為止。(2)釋放X鎖操作:事務(wù)T對(duì)數(shù)據(jù)R加X(jué)鎖成功后,才可以對(duì)R進(jìn)行數(shù)據(jù)更新。直至遇到Commit或Rollback語(yǔ)句,才會(huì)釋放X鎖。

7.2.4封鎖技術(shù)使用S鎖的操作有兩個(gè):(1)申請(qǐng)加S鎖操作:事務(wù)T對(duì)數(shù)據(jù)R進(jìn)行讀操作前,必須申請(qǐng)加S鎖成功。如果數(shù)據(jù)R當(dāng)前沒(méi)有任何鎖、或只有S鎖,則可直接加S鎖;如果數(shù)據(jù)R當(dāng)前有X鎖,則事務(wù)只能等待,直到該X鎖釋放為止。(2)釋放S鎖操作:事務(wù)T對(duì)數(shù)據(jù)R加S鎖成功后,才可以對(duì)R進(jìn)行數(shù)據(jù)讀取。讀完后,立即釋放S鎖。

7.2.4封鎖技術(shù)2.封鎖協(xié)議

在運(yùn)用S鎖和X鎖對(duì)數(shù)據(jù)對(duì)象進(jìn)行加鎖操作時(shí),需要遵循一些規(guī)則,這些規(guī)則稱為封鎖協(xié)議(LockingProtocol)。對(duì)封鎖方式采用不同的規(guī)則,就形成不同的封鎖協(xié)議。目前,封鎖協(xié)議分為三級(jí)。各級(jí)封鎖協(xié)議對(duì)并發(fā)操作帶來(lái)的丟失更新、不可重復(fù)讀、讀“臟”數(shù)據(jù)等不一致問(wèn)題,可以分不同級(jí)別加以解決。(1)一級(jí)封鎖協(xié)議事務(wù)T在更新數(shù)據(jù)R之前必須先對(duì)其加X(jué)鎖,直到事務(wù)結(jié)束才釋放。這就是一級(jí)加鎖協(xié)議。它能防止丟失更新,但它不要求讀取數(shù)據(jù)要加S鎖,所以它不能解決不可重復(fù)讀和讀“臟”數(shù)據(jù)問(wèn)題。

7.2.4封鎖技術(shù)(2)二級(jí)封鎖協(xié)議一級(jí)封鎖協(xié)議加上事務(wù)T在讀取數(shù)據(jù)R之前必須先對(duì)其加S鎖,讀完后,立即釋放S鎖。這就是二級(jí)加鎖協(xié)議。它能防止丟失更新,也能防止讀“臟”數(shù)據(jù)問(wèn)題,但由于它讀完立即釋放,故它不能解決不可重復(fù)讀問(wèn)題。(3)三級(jí)封鎖協(xié)議在一級(jí)封鎖協(xié)議的技術(shù)上,加上事務(wù)T在讀取數(shù)據(jù)R之前必須先對(duì)其加S鎖,直到事務(wù)結(jié)束,才釋放S鎖。這就是三級(jí)加鎖協(xié)議。由于它在讀完數(shù)據(jù)后,也不釋放S鎖,使得別的事務(wù)無(wú)法更新數(shù)據(jù)。故它不但能防止丟失更新、止讀“臟”數(shù)據(jù)問(wèn)題,還能解決不可重復(fù)讀問(wèn)題。

7.2.5封鎖帶來(lái)的問(wèn)題及解決辦法事務(wù)使用封鎖機(jī)制后,會(huì)產(chǎn)生活鎖、死鎖等問(wèn)題。

1.活鎖如果事務(wù)T1封鎖了數(shù)據(jù)對(duì)象R,事務(wù)T2又請(qǐng)求封鎖R,于是T2等待。接著事務(wù)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)等待。這種在多個(gè)事務(wù)請(qǐng)求對(duì)同一數(shù)據(jù)封鎖時(shí),總是某一個(gè)用戶等待,得不到封鎖的情況,稱為活鎖。解決活鎖的辦法是采用“先來(lái)先服務(wù)”的策略,即簡(jiǎn)單的排隊(duì)方式。

7.2.5封鎖帶來(lái)的問(wèn)題及解決辦法

2.死鎖系統(tǒng)中有兩個(gè)或兩個(gè)以上的事務(wù)都處于等待狀態(tài),并且每個(gè)事務(wù)都在等待其中另一個(gè)事務(wù)解除封鎖,它才能夠繼續(xù)進(jìn)行下去,結(jié)果造成任何一個(gè)事務(wù)都無(wú)法繼續(xù)執(zhí)行。這種情況稱為系統(tǒng)進(jìn)入了“死鎖”狀態(tài)??梢杂檬聞?wù)依賴圖的形式測(cè)試系統(tǒng)中是否存在死鎖。圖中用圓圈表示一個(gè)事務(wù),箭頭表示事務(wù)的依賴關(guān)系。如圖7-5所示,事務(wù)T1請(qǐng)求加鎖數(shù)據(jù)A,但A已被事務(wù)T2封鎖;T2請(qǐng)求加鎖數(shù)據(jù)B,但B已被事務(wù)T1封鎖,這樣存在一個(gè)循環(huán),系統(tǒng)進(jìn)入死鎖狀態(tài)。

7.2.5封鎖帶來(lái)的問(wèn)題及解決辦法

DBMS的并發(fā)控制子系統(tǒng)一旦監(jiān)測(cè)到系統(tǒng)中存在死鎖,就要設(shè)法解除。常用的方法是選擇一個(gè)處理死鎖代價(jià)比較小的事務(wù),將其撤銷,釋放此事務(wù)持有的所有鎖,使其他事務(wù)得以繼續(xù)運(yùn)行下去。例如,在圖7-6中,撤銷事務(wù)T3,即可解除死鎖。圖7-5事務(wù)依賴圖

圖7-6事務(wù)的有環(huán)依賴圖7.2.6鎖的粒度封鎖對(duì)象的大小稱為封鎖粒度。封鎖對(duì)象可

溫馨提示

  • 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. 人人文庫(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)論