




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
7.2數(shù)據(jù)庫并發(fā)控制本章主要內(nèi)容:(1)事務:事務的概念、事務的ACID性質、事務的狀態(tài)變遷圖(2)數(shù)據(jù)科的并發(fā)控制:并發(fā)操作產(chǎn)生的3類問題、鎖(3)數(shù)據(jù)庫的恢復技術:重復存儲、寫日志(4)數(shù)據(jù)庫的完整性控制:數(shù)據(jù)的正確性、有效性和相容性(5)數(shù)據(jù)庫的安全性控制:合法用法的授權訪問7.2數(shù)據(jù)庫并發(fā)控制數(shù)據(jù)庫的并發(fā)與操作系統(tǒng)的并發(fā),兩個概念是有區(qū)別的。在計算機操作系統(tǒng)中,進程(Process)是指內(nèi)存中正在運行的程序。而并發(fā),是指在同一時間段里,一個CPU執(zhí)行多個進程。一個進程可以分出不同的時間片、執(zhí)行不同的任務,這就是線程(Thread),線程是操作系統(tǒng)能夠進行運算調度的最小邏輯單位。
DBMS屬于多用戶、共享系統(tǒng),許多事務可能在同一時間對同一數(shù)據(jù)進行操作,這就是“并發(fā)操作”。例如,網(wǎng)上火車票售票系統(tǒng),如果不加以控制,很多人就會搶購到同一個座位號的火車票。DBMS的并發(fā)控制子系統(tǒng),就是負責協(xié)調并發(fā)事務執(zhí)行的,它可保證數(shù)據(jù)庫的完整性,同時避免用戶得到不正確的數(shù)據(jù)。
7.2.1并發(fā)操作帶來的3個問題數(shù)據(jù)庫的并發(fā)操作,如果不加以控制,可能會導致下面3個問題。
1.丟失更新假設有2人同時在網(wǎng)上購買同一車次的火車票,甲讀出該列車當前售出的最大票序號為80(記為事務T1),乙讀出該列車當前售出的最大票序號也為80(記為事務T2)。甲開始購買下一張票,票號為81,并將已售出的最大票序號更新為81;此時,乙也開始購買下一張票,票號為81,并將已售出的最大票序號更新為81。兩個事務同時讀取售出的最大票號并進行更新,由于沒有加以控制,導致事務T1的更新被丟失了,結果是2人購買了同一個座位號。如圖7-3(a)所示。
7.2.1并發(fā)操作帶來的3個問題
2.不可重復讀假設有2個事務T1、T2都要操作數(shù)據(jù)項A,T1是將A加10,T2是分別將數(shù)據(jù)項A的值加到數(shù)據(jù)項B、C上。由于緩沖區(qū)空間有限,T2需要分2次讀取A的值。當T2第二次讀取數(shù)據(jù)項A的值時,A的值已經(jīng)被修改了。人們把這種問題,稱為不可重復讀。兩個事務的運行時序如圖7-3(b)所示。
3.讀“臟”數(shù)據(jù)假設事務T1修改了數(shù)據(jù)項A的值并寫回了磁盤,事務T2讀取了A的值后,由于某種原因T1要被撤銷,它修改的值要恢復原值,這樣T2讀取的數(shù)據(jù)A就與數(shù)據(jù)庫中的數(shù)據(jù)不一致,這時人們就稱T2讀到的數(shù)據(jù)為“臟”數(shù)據(jù)。如圖7-3(c)所示。
7.2.1并發(fā)操作帶來的3個問題產(chǎn)生上述3類問題的主要原因是并發(fā)操作破壞了事務的隔離性。并發(fā)控制機制就是要采用正確的方式調度并發(fā)操作,使一個事務的執(zhí)行不受其他事務的干擾,從而避免造成數(shù)據(jù)的不一致。時序事務T1事務T2時序事務T1事務T2時序事務T1事務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)不可重復讀
(c)讀“臟”數(shù)據(jù)
7.2.2并發(fā)調度的可串行化那么,什么樣的并發(fā)調度才是正確的?答案是可串行調度。事務的執(zhí)行次序稱為“調度”。如果多個事務依次執(zhí)行,則稱為事務的“串行調度”。如果利用分時的方法同時處理多個事務,則稱為事務的“并發(fā)調度”?!按姓{度”與“可串行調度”是兩個不同的概念。如果有n個事務并發(fā)調度,所有可能的并發(fā)調度總數(shù)遠遠大于n!。這其中,有的并發(fā)調度是正確的,有的并發(fā)調度是錯誤的。
7.2.2并發(fā)調度的可串行化定義7-2多個事務的并行執(zhí)行是正確的,當且僅當其結果與按某一次序串行地執(zhí)行時的結果相同,這種調度策略稱為可串行化(serializable)的調度,否則稱為不可串行化的調度。在所有并發(fā)調度中,可串行化的調度是正確的,不可串行化的調度是錯誤的。如果有n個事務并發(fā)調度,所有可能的并發(fā)調度總數(shù)遠遠大于n!。這其中,有的并發(fā)調度是正確的,有的并發(fā)調度是錯誤的。
7.2.2并發(fā)調度的可串行化例7-2設數(shù)據(jù)項A的初始值為10,事務T1將A的值加8,事務T2將A的值乘以2。如果先T1,再T2,則A的結果為36;如果先T2,再T1,則A的結果為28,這2種串行調度都是正確的。如圖7-4(a)、7-4(b)所示的調度是可串行的,故結果是正確的。而圖7-4(c)所示的調度是不可串行的,故結果是錯誤的。時序事務T1事務T2時序事務T1事務T2時序事務T1事務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)結果A=36結果A=28結果A=20(a)先T1,后T2,串行調度
(b)先T2,后T1,串行調度
(c)不可串行調度
7.2.4封鎖技術并發(fā)控制的主要方法是封鎖(Locking)。定義7-3鎖(lock)是一個與數(shù)據(jù)項相關的變量,對可能應用于該數(shù)據(jù)項上的操作而言,鎖描述了該數(shù)據(jù)項的狀態(tài)。通常在數(shù)據(jù)庫中的每一個數(shù)據(jù)項都有一個鎖。封鎖就是事務T對某個數(shù)據(jù)項操作之前,先向系統(tǒng)發(fā)出請求,對其加鎖,加鎖后事務T就對該數(shù)據(jù)項有了某種控制,在事務T釋放它的鎖之前,其它的事務不能更新此數(shù)據(jù)項。
7.2.4封鎖技術
1.鎖的類型基本的封鎖類型有兩種:排他鎖(ExclusiveLocks,簡稱X鎖)和共享鎖(ShareLocks,簡稱S鎖)。定義7-4排他鎖又稱寫鎖。如果事務T對某個數(shù)據(jù)對象R(可以為數(shù)據(jù)項、記錄、數(shù)據(jù)表甚至整個數(shù)據(jù)庫)加上了X鎖,則只允許事務T讀取和更新數(shù)據(jù)對象R,其它任何事務都不能再對R加任何類型的鎖,直到T釋放R上的鎖。定義7-5共享鎖又稱讀鎖。如果事務T對某個數(shù)據(jù)對象R加上了S鎖,則允許事務T讀取R上的數(shù)據(jù),但不能更新R上的數(shù)據(jù)。其它事務可以對R加S鎖,但不能加X的鎖。
7.2.4封鎖技術使用X鎖的操作有兩個:(1)申請加X鎖操作:事務T對數(shù)據(jù)R進行寫操作前,必須申請加X鎖成功。如果數(shù)據(jù)R當前沒有任何鎖,則可直接加X鎖;如果數(shù)據(jù)R當前有一把或多把S鎖、但沒有X鎖,則事務T先申請加上一把S鎖,然后等待R上所有別的S鎖全部釋放后,再將自己的S鎖升級為X鎖;如果數(shù)據(jù)R當前有X鎖,則事務只能等待,直到該X鎖釋放為止。(2)釋放X鎖操作:事務T對數(shù)據(jù)R加X鎖成功后,才可以對R進行數(shù)據(jù)更新。直至遇到Commit或Rollback語句,才會釋放X鎖。
7.2.4封鎖技術使用S鎖的操作有兩個:(1)申請加S鎖操作:事務T對數(shù)據(jù)R進行讀操作前,必須申請加S鎖成功。如果數(shù)據(jù)R當前沒有任何鎖、或只有S鎖,則可直接加S鎖;如果數(shù)據(jù)R當前有X鎖,則事務只能等待,直到該X鎖釋放為止。(2)釋放S鎖操作:事務T對數(shù)據(jù)R加S鎖成功后,才可以對R進行數(shù)據(jù)讀取。讀完后,立即釋放S鎖。
7.2.4封鎖技術2.封鎖協(xié)議
在運用S鎖和X鎖對數(shù)據(jù)對象進行加鎖操作時,需要遵循一些規(guī)則,這些規(guī)則稱為封鎖協(xié)議(LockingProtocol)。對封鎖方式采用不同的規(guī)則,就形成不同的封鎖協(xié)議。目前,封鎖協(xié)議分為三級。各級封鎖協(xié)議對并發(fā)操作帶來的丟失更新、不可重復讀、讀“臟”數(shù)據(jù)等不一致問題,可以分不同級別加以解決。(1)一級封鎖協(xié)議事務T在更新數(shù)據(jù)R之前必須先對其加X鎖,直到事務結束才釋放。這就是一級加鎖協(xié)議。它能防止丟失更新,但它不要求讀取數(shù)據(jù)要加S鎖,所以它不能解決不可重復讀和讀“臟”數(shù)據(jù)問題。
7.2.4封鎖技術(2)二級封鎖協(xié)議一級封鎖協(xié)議加上事務T在讀取數(shù)據(jù)R之前必須先對其加S鎖,讀完后,立即釋放S鎖。這就是二級加鎖協(xié)議。它能防止丟失更新,也能防止讀“臟”數(shù)據(jù)問題,但由于它讀完立即釋放,故它不能解決不可重復讀問題。(3)三級封鎖協(xié)議在一級封鎖協(xié)議的技術上,加上事務T在讀取數(shù)據(jù)R之前必須先對其加S鎖,直到事務結束,才釋放S鎖。這就是三級加鎖協(xié)議。由于它在讀完數(shù)據(jù)后,也不釋放S鎖,使得別的事務無法更新數(shù)據(jù)。故它不但能防止丟失更新、止讀“臟”數(shù)據(jù)問題,還能解決不可重復讀問題。
7.2.5封鎖帶來的問題及解決辦法事務使用封鎖機制后,會產(chǎn)生活鎖、死鎖等問題。
1.活鎖如果事務T1封鎖了數(shù)據(jù)對象R,事務T2又請求封鎖R,于是T2等待。接著事務T3也請求封鎖R。當T1釋放了R上的鎖之后系統(tǒng)先批準了T3的請求,T2仍然等待,然后T4也請求封鎖R。當T3釋放了R上的鎖之后系統(tǒng)先批準了T4的請求…,T2可能永遠等待。這種在多個事務請求對同一數(shù)據(jù)封鎖時,總是某一個用戶等待,得不到封鎖的情況,稱為活鎖。解決活鎖的辦法是采用“先來先服務”的策略,即簡單的排隊方式。
7.2.5封鎖帶來的問題及解決辦法
2.死鎖系統(tǒng)中有兩個或兩個以上的事務都處于等待狀態(tài),并且每個事務都在等待其中另一個事務解除封鎖,它才能夠繼續(xù)進行下去,結果造成任何一個事務都無法繼續(xù)執(zhí)行。這種情況稱為系統(tǒng)進入了“死鎖”狀態(tài)??梢杂檬聞找蕾噲D的形式測試系統(tǒng)中是否存在死鎖。圖中用圓圈表示一個事務,箭頭表示事務的依賴關系。如圖7-5所示,事務T1請求加鎖數(shù)據(jù)A,但A已被事務T2封鎖;T2請求加鎖數(shù)據(jù)B,但B已被事務T1封鎖,這樣存在一個循環(huán),系統(tǒng)進入死鎖狀態(tài)。
7.2.5封鎖帶來的問題及解決辦法
DBMS的并發(fā)控制子系統(tǒng)一旦監(jiān)測到系統(tǒng)中存在死鎖,就要設法解除。常用的方法是選擇一個處理死鎖代價比較小的事務,將其撤銷,釋放此事務持有的所有鎖,使其他事務得以繼續(xù)運行下去。例如,在圖7-6中,撤銷事務T3,即可解除死鎖。圖7-5事務依賴圖
圖7-6事務的有環(huán)依賴圖7.2.6鎖的粒度封鎖對象的大小稱為封鎖粒度。封鎖對象可
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 賓館公寓轉讓合同范本
- 2025年護欄清洗車合作協(xié)議書
- 代表企業(yè)簽合同范例
- 代轉店鋪合同范本
- 農(nóng)村新建樓房承包合同范本
- 北京裝飾工程合同范本
- 合作廠家合同范本
- 合同范本 解釋權
- 主體勞務簡易合同范本
- 勞務派遣合同范本封面
- VTE防治在臨床科室的落地
- 2025年度個人住房買賣合同(帶家居家具)
- 2025年02月麗江師范學院(麗江師范高等??茖W校)第一批人員20人筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 生產(chǎn)車間布局優(yōu)化與現(xiàn)場改善的策略研究
- 文化自信-最炫中國風(2024年內(nèi)蒙古赤峰中考語文試卷非連續(xù)性文本閱讀試題)
- 中央2025年中國作家協(xié)會所屬單位招聘11人筆試歷年參考題庫附帶答案詳解
- 2025年1月浙江省高考生物試卷(含答案)
- 2025年南京信息職業(yè)技術學院高職單招職業(yè)適應性測試近5年??及鎱⒖碱}庫含答案解析
- 《餐飲業(yè)發(fā)展》課件 - 探索美食世界的奧秘
- ct球管維修合同
- 氣管切開口腔護理操作流程
評論
0/150
提交評論