




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第10章
事務與并發控制
數據庫原理與應用1本章內容10.1事務10.2并發控制210.1事務10.1.1事務的基本概念10.1.2事務的特征10.1.3事務處理模型310.1.1事務的基本概念事務(transaction)是用戶定義的數據操作系列,這些操作作為一個完整的工作單元執行。一個事務內的所有語句作為一個整體,要么全部執行,要么全部不執行。4舉例例如,A賬戶轉賬給B賬戶n元錢,這個業務活動包含如下兩個操作:
第一個操作:A賬戶?n
第二個操作:B賬戶+n假設第一個操作成功了,但第二個操作由于某種原因沒有成功(比如突然停電等)。那么在系統恢復正常運行后,A賬戶的金額是減n之前的值還是減n之后的值呢?5舉例(續)如果B賬戶的金額沒有變化(沒有加上n),則正確的情況是A賬戶的金額應該是沒有做減n操作之前的值(如果A賬戶是減n之后的值,則A賬戶中的金額和B賬戶中的金額就對不上了,這顯然是不正確的)。怎樣保證在系統恢復之后,A賬戶中的金額是減n前的值呢?這就需要用到事務的概念。6事務基本概念事務可以保證在一個事務中的全部操作或者全部成功,或者全部失敗。當第二個操作沒有成功完成時,系統自動撤銷第一個操作,使第一個操作不做。這樣當系統恢復正常時,A賬戶和B賬戶中的數值就是正確的。必須顯式地告訴數據庫管理系統哪些操作屬于一個事務,這可以通過標記事務的開始與結束來實現。7事務的開始和結束不同的事務處理模型,事務的開始標記不完全一樣,但事務的結束標記都是一樣的。事務的結束標記有兩個:正常結束,COMMIT,表示提交,即事務中的所有操作都會物理地保存到數據庫中,成為永久操作;異常結束,ROLLBACK,表示回滾,即事務中的全部操作被撤銷,數據回到事務開始之前的狀態。810.1.2事務的特征事務有四個特征,即原子性(atomicity)一致性(consistency)隔離性(isolation)持久性(durability)這4個特征也簡稱為事務的ACID特征。9原子性事務的原子性是指事務是數據庫的邏輯工作單位,事務中的操作,要么都做,要么都不做。10一致性事務的一致性是指事務執行的結果必須是使數據庫從一個一致性狀態變到另一個一致性狀態。當事務成功提交時,數據庫就從事務開始前的一致性狀態轉到了事務結束后的一致性狀態。11隔離性事務的隔離性是指數據庫中一個事務的執行不能被其他事務干擾。即一個事務內部的操作及使用的數據對其他事務是隔離的,并發執行的各個事務不能相互干擾。12持久性事務的持久性也稱為永久性(permanence),指事務一旦提交,則其對數據庫中數據的改變就是永久的,以后的操作或故障不會對事務的操作結果產生任何影響。13說明事務是數據庫并發控制和恢復的基本單位。保證事務的ACID特性是事務處理的重要任務。事務的ACID特性可能遭到破壞的因素有:多個事務并行運行時,不同事務的操作有交叉情況。數據庫管理系統必須保證多個事務在交叉運行時不影響這些事務的原子性。事務在運行過程中被強迫停止。數據庫管理系統必須保證被強迫終止的事務對數據庫和其他事務沒有任何影響。1410.1.3事務處理模型事務有兩種類型:顯式事務隱式事務顯式事務是有顯式的開始和結束標記的事務。隱式事務是指每一條數據操作語句都自動地成為一個事務。15MySQL的事務標記事務的開始標記是:
STARTTRANSACTION;事務的結束標記有如下兩個:COMMIT;
#正常結束ROLLBACK;
#異常結束16轉賬示例STARTTRANSACTION;UPDATE支付表SET賬戶總額=賬戶總額-nWHERE賬戶號='A'UPDATE支付表SET賬戶總額=賬戶總額+nWHERE賬戶號='B'COMMIT;17本章內容10.1事務10.2并發控制1810.2并發控制10.2.1并發控制概述10.2.2并發控制措施10.2.3封鎖協議10.2.4活鎖和死鎖10.2.5并發調度的可串行性10.2.6兩段鎖協議1910.2并發控制數據庫系統一個明顯的特點是多個用戶共享數據庫資源,尤其是多用戶可以同時存取相同數據,在這樣的系統中,在同一時刻同時運行的事務可達數百個。當系統中同時有多個事務在運行時,特別是當這些事務是對同一段數據進行操作時,彼此之間就有可能產生相互干擾的情況。20串行執行如果事務是順序執行的,即一個事務完成之后,再開始另一個事務,則稱這種執行方式為串行執行。21交叉并行執行如果數據庫管理系統可以同時接受多個事務,并且這些事務在時間上可以重疊執行,則稱這種執行式為并發執行。22交叉并發與同時并發在單CPU系統中,同一時間只能有一個事務占據CPU,各個事務交叉地使用CPU,這種并發方式稱為交叉并發。在多CPU系統中,多個事務可以同時占有CPU,這種并發方式稱為同時并發。主要討論單CPU中的交叉并發的情況。2310.2并發控制10.2.1并發控制概述10.2.2并發控制措施10.2.3封鎖協議10.2.4活鎖和死鎖10.2.5并發調度的可串行性10.2.6兩段鎖協議2410.2.1并發控制概述設有訂票業務:①A訂票點(事務A)讀出航班目前的機票余額數,假設為10張;②B訂票點(事務B)讀出航班目前的機票余額數,也為10張;③A訂票點訂出6張機票,修改機票余額為10-6=4,并將4寫回到數據庫中;④B訂票點訂出5張機票,修改機票余額為10-5=5,并將5寫回到數據庫中。這兩個事務不能反映出飛機票數不夠的情況,而且B事務還覆蓋了A事務對數據的修改,使數據庫中的數據不正確。25數據不一致情況數據庫管理系統必須想辦法避免出現數據不正確(不一致)情況,這是數據庫管理系統在并發控制中要解決的問題。并發操作所帶來的數據不一致情況大致可以概括為四種:丟失數據修改、讀“臟”數據、不可重復讀和產生“幽靈”數據。261.丟失數據修改時間事務T1事務T2t1讀A=16t2讀A=16t3修改A=A–1=15寫回A=15t4修改A=A–4=12寫回A=12(覆蓋了T1對A的修改)272.讀“臟”數據28時間事務T1事務T2t1讀B=100修改B=B*2=200寫回B=200t2讀B=200(讀入T1的“臟數據”)t3ROLLBACKB恢復為1003.不可重復讀時間事務T1事務T2t1讀A=50讀B=100計算A+B=150t2讀B=100修改B=B*2=200寫回B=200t3讀A=50讀B=200計算A+B=250(與前一次統計的值不同)294.產生“幽靈”數據產生“幽靈”數據實際屬于不可重復讀的范疇。當事務T1按一定條件從數據庫中讀取了某些數據記錄后,事務T2刪除了其中的部分記錄,或在其中添加了部分記錄,則當T1再次按相同條件讀取數據時,發現其中莫名其妙地少了(刪除)或多了(插入)一些記錄。這樣的數據對T1來說就是“幽靈”數據或稱“幻影”數據。3010.2并發控制10.2.1并發控制概述10.2.2并發控制措施10.2.3封鎖協議10.2.4活鎖和死鎖10.2.5并發調度的可串行性10.2.6兩段鎖協議3110.2.2并發控制措施進行并發控制的主要方式是使用封鎖機制,即加鎖(locking)。加鎖是一種并行控制技術,用來調整對共享目標(如數據庫中共享記錄)的并行存取。事務通過向封鎖管理程序的系統組成部分發出請求而對記錄加鎖。32以飛機訂票系統為例當事務T要修改訂票數時,在讀取訂票數之前先封鎖該數據,然后再對數據進行讀取和修改操作。這時其他事務就不能讀取和修改訂票數,直到事務T修改完成并將數據寫回到數據庫,并解除對該數據的封鎖之后才能由其他事務使用這些數據。33加鎖加鎖就是限制事務內和事務外對數據的操作。加鎖是實現并發控制的一個非常重要的技術。加鎖就是事務T在對某個數據操作之前,先向系統發出請求,封鎖其所要使用的數據。加鎖后事務T對其要操作的數據具有了一定的控制權,在事務T釋放它的鎖之前,其他事務不能操作這些數據。34鎖的類型基本的鎖類型有兩種:排他鎖(exclusivelock,也稱為X鎖或寫所)共享鎖(sharelock,也稱S鎖或讀鎖)。35共享鎖若事務T給數據對象A加了S鎖,則事務T可以讀A,但不能修改A,其他事務可以再給A加S鎖,但不能加X鎖,直到T釋放了A上的S鎖為止。即對于讀操作(檢索)來說,可以有多個事務同時獲得共享鎖,但阻止其他事務對已獲得共享鎖的數據進行排他封鎖。36排他鎖若事務T給數據對象A加了X鎖,則允許T讀取和修改A,但不允許其他事務再給A加任何類型的鎖和進行任何操作。即一旦一個事務獲得了對某一數據的排他鎖,則任何其他事務均不能對該數據進行任何封鎖,其他事務只能進入等待狀態,直到第一個事務撤銷了對該數據的封鎖。37加鎖類型的相容矩陣3810.2并發控制10.2.1并發控制概述10.2.2并發控制措施10.2.3封鎖協議10.2.4活鎖和死鎖10.2.5并發調度的可串行性10.2.6兩段鎖協議3910.2.3封鎖協議在運用X鎖和S鎖給數據對象加鎖時,還需要約定一些規則,如何時申請X鎖或S鎖、持鎖時間、何時釋放鎖等,稱這些規則為封鎖協議或加鎖協議(lockingprotocel)。對封鎖方式規定不同的規則,就形成了各種不同級別的封鎖協議。40一級封鎖協議對事務T要修改的數據加X鎖,直到事務結束(包括正常結束和非正常結束)時才釋放。一級封鎖協議可以防止丟失修改,并保證事務T是可恢復的。但不能保證可重復讀和不讀“臟”數據。41沒有丟失修改示例事務T1時間事務T2請求對A加X鎖,獲得t1
讀A=16t2
t3請求對A加X鎖,等待修改
A=A-1=15寫回A=15t4等待釋放A的X鎖t5等待
t6獲得A的X鎖
t7讀A=15
t8修改
A=A-4=11寫回A=11
t9釋放A的X鎖42二級封鎖協議一級封鎖協議加上事務T對要讀取的數據加S鎖,讀完后即釋放S鎖。二級封鎖協議除了可以防止丟失修改外,還可以防止讀“臟”數據。但不能保證可重復讀數據。43不讀“臟”數據示例事務T1時間事務T2請求對C加X鎖,獲得t1
讀C=50t2
修改C=C*2=100寫回C=100t3
t4請求對C加S鎖,等待撤銷,恢復C為50t5等待釋放C的X鎖t6等待
t7獲得C的S鎖
t8讀C=50
t9釋放C的S鎖44三級封鎖協議一級封鎖協議加上事務T對要讀取的數據加S鎖,并直到事務結束才釋放。三級封鎖協議除了可以防止丟失數據修改和不讀“臟”數據之外,還進一步防止了不可重復讀。45可重復讀示例事務T1時間事務T2請求對A、B分別加S鎖,獲得t1
讀A=50,B=100計算A+B=150t2
t3請求對B加X鎖,等待讀A=50,B=100計算A+B=150t4等待將計算結果寫回數據庫t5等待釋放A的S鎖,釋放B的S鎖t6等待
t7獲得B的X鎖
t8讀B=100
t9修改B=B*2=200寫回B=200
t10釋放B的X鎖46各級封鎖協議區別封鎖協議X鎖(對寫數據)S鎖(對讀數據)不丟失修改(寫)不讀臟數據(讀)可重復讀(讀)一級事務全程加鎖不加√二級事務全程加鎖事務開始加鎖,讀完即釋放鎖√√三級事務全程加鎖事務全程加鎖√√√4710.2并發控制10.2.1并發控制概述10.2.2并發控制措施10.2.3封鎖協議10.2.4活鎖和死鎖10.2.5并發調度的可串行性10.2.6兩段鎖協議4810.2.4活鎖和死鎖——活鎖49避免活鎖簡單方法是采用先來先服務的策略。當多個事務請求封鎖同一數據對象時,數據庫管理系統按先請求先滿足的事務排隊策略,當數據對象上的鎖被釋放后,讓事務隊列中第一個事務獲得鎖。5010.2.4活鎖和死鎖——死鎖51解決死鎖在數據庫中解決死鎖問題的方法主要有兩類一類是采取一定的措施來預防死鎖的發生,另一類是允許死鎖的發生,但采用一定的手段定期診斷系統中有無死鎖,若有則解除之。52預防死鎖——一次封鎖法每個事務一次將所有要使用的數據全部加鎖,否則就不能繼續執行。問題:封鎖范圍過大,降低了系統的并發性。由于數據庫中的數據不斷變化,使原來可以不加鎖的數據,在執行過程中可能變成了被封鎖對象,進一步擴大了封鎖范圍,從而更進一步降低了并發性。53預防死鎖——順序封鎖法預先對數據對象規定一個封鎖順序,所有事務都按這個順序封鎖。問題:若封鎖對象很多,則隨著插入、刪除等操作的不斷變化,使維護這些資源的封鎖順序很困難,事務的封鎖請求可隨事務的執行而動態變化,因此很難事先確定每個事務的封鎖數據及其封鎖順序。54死鎖的診斷和解除——超時法如果一個事務的等待時間超過了規定的時限,則認為發生了死鎖。優點:實現起來比較簡單。不足可能產生誤判情況,比如,如果事務因某些原因造成等待時間比較長,超過了規定的等待時限,則系統會誤認為發生了死鎖。若時限設置的比較長,則不能對發生的死鎖進行及時的處理。55死鎖的診斷和解除——等待圖法事務等待圖是一個有向圖G=(T,U)。T為結點的集合,每個結點表示正在運行的事務;U為邊的集合,每條邊表示事務等待的情況。若T1等待T2,則T1和T2之間劃一條有向邊,從T1指向T2。56事務等待圖法(a)事務T1等待T2,T2等待T1,因此產生了死鎖。(b)事務T1等待T2,T2等待T3,T3等待T4,T4又等待T1,因此也產生了死鎖57等待圖法死鎖判斷事務等待圖動態地反映了所有事務的等待情況。數據庫管理系統中的并發控制子系統周期性地(比如每隔幾秒)生成事務的等待圖,并進行檢測。如果發現圖中存在回路,則表示系統中出現了死鎖。5810.2并發控制10.2.1并發控制概述10.2.2并發控制措施10.2.3封鎖協議10.2.4活鎖和死鎖10.2.5并發調度的可串行性10.2.6兩段鎖協議5910.2.5并發調度的可串行性數據庫管理系統對并發事務中操作的調度是隨機的,而不同的調度會產生不同的結果,哪個結果是正確的,哪個是不正確的?直觀地說,如果多個事務在某個調度下的執行結果與這些事務在某個串行調度下的執行結果相同,那么這個調度就一定是正確的。60進一步說明多個事務的并發執行是正確的,當且僅當其結果與按某一順序的串行執行的結果相同,就稱這種調度為可串行化的調度。可串行性是并發事務正確性的準則,根據這個準則可知,一個給定的并發調度,當且僅當它是可串行化的調度時,才認為是正確的調度。61示例設有兩個事務,分別包含如下操作:事務T1:讀B;A=B+1;寫回A;事務T2:讀A;B=A+1;寫回B;假設A、B的初值均為4,若按T1
→T2的順序執行,其結果為A=5,B=6若按T2
→T1的順序執行,其結果為A=6,B=5則當并發調度時,如果執行的結果是這兩者之一,則認為都是正確的結果。62串行調度示例1T1T2對B加S鎖讀B=4釋放B的S鎖對A加X鎖修改A=B+1寫回A(=5)釋放A的X鎖對A加S鎖讀A=5釋放A的S鎖對B加X鎖修改B=A+1寫回B(=6)釋放B的X鎖63串行調度示例2T1T2對A加S鎖讀A=4釋放A的S鎖對B加X鎖修改B=A+1寫回B(=5)釋放B的X鎖對B加S鎖讀B=5釋放B的S鎖對A加X鎖修改A=B+1寫回A(=6)釋放A的X鎖64不可串行化調度示例T1T2對B加S鎖讀B=4對A加S鎖讀A=4釋放B的S鎖釋放A的S鎖對A加X鎖修改A=B+1寫回A(=5)對B加X鎖修改B=A寫回B(=5)釋放A的X鎖釋放B的X鎖65可串行化調度T1T2對B加S鎖讀B=4釋放B的S鎖A加X鎖要對A加S鎖修改A=B+1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國山梨醇市場發展動態及前景趨勢研究報告
- 2025-2030年中國工業爐行業運行格局及投資風險評估報告
- 2025-2030年中國家庭影院境外融資報告
- 數學教師專業成長與發展計劃
- 港口碼頭照明安裝合同(2篇)
- 教育機構資產評估的風險管理及措施
- 2025-2030年中國姜油酮市場深度調研及投資方向建議研究報告
- 2025-2030年中國大米市場預測與投資盈利研究報告
- 三年級閱讀與寫作技能提升計劃
- 2024-2025學年河北省石家莊市長安區上學期八年級期中考試英語試卷
- 第六章學習法治思想提升法治素養講解
- 無錫地鐵線網文旅融合一體化發展策略研究
- 8S管理介紹課件
- 押運員管理考核規定(4篇)
- 夜市現場管理制度內容
- 醫療診斷中的批判性思維應用
- 健康管理考試題庫及答案
- 高三臨界生會議課件
- 安徽省2024年中考道德與法治真題試卷(含答案)
- 患者與護理工簽訂合同模板
- 2024年四川省公務員錄用考試《行測》真題及答案解析
評論
0/150
提交評論