版權(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)估標(biāo)準(zhǔn)手冊(cè)
- XX初中八年級(jí)下學(xué)期學(xué)科競(jìng)賽輔導(dǎo)與選拔方案
- 水頭綠化施工方案(3篇)
- 沙漠高速施工方案(3篇)
- PHC高強(qiáng)預(yù)應(yīng)力混凝土管樁施工方案
- 液冷管路施工方案(3篇)
- 濰坊洗車施工方案(3篇)
- 申論活動(dòng)方案策劃格式(3篇)
- 相親聯(lián)營(yíng)活動(dòng)方案策劃(3篇)
- 禁毒教育活動(dòng)策劃方案(3篇)
- 2025-2030中國(guó)駱駝市場(chǎng)前景規(guī)劃與投資運(yùn)作模式分析研究報(bào)告
- 2026中國(guó)電信四川公用信息產(chǎn)業(yè)有限責(zé)任公司社會(huì)成熟人才招聘?jìng)淇碱}庫(kù)及完整答案詳解一套
- 綠化設(shè)備安全培訓(xùn)課件
- 鋼結(jié)構(gòu)玻璃雨棚安裝施工方案
- 給水管道遷改工程施工方案
- 【數(shù)學(xué)】二次根式及其性質(zhì)第1課時(shí)二次根式的概念課件 2025~2026學(xué)年人教版數(shù)學(xué)八年級(jí)下冊(cè)
- 漢源縣審計(jì)局關(guān)于公開(kāi)招聘編外專業(yè)技術(shù)人員的備考題庫(kù)附答案
- 2025安徽省合肥市公務(wù)員考試《行測(cè)》題庫(kù)及答案(各地真題)
- 2026年上海市普陀區(qū)社區(qū)工作者公開(kāi)招聘筆試參考題庫(kù)及答案解析
- 《中華人民共和國(guó)危險(xiǎn)化學(xué)品安全法》全套解讀
- 2025云南保山電力股份有限公司招聘(100人)筆試歷年參考題庫(kù)附帶答案詳解
評(píng)論
0/150
提交評(píng)論