第10章 事務(wù)處理、并發(fā)控制與故障恢復(fù)技術(shù)課件_第1頁
第10章 事務(wù)處理、并發(fā)控制與故障恢復(fù)技術(shù)課件_第2頁
第10章 事務(wù)處理、并發(fā)控制與故障恢復(fù)技術(shù)課件_第3頁
第10章 事務(wù)處理、并發(fā)控制與故障恢復(fù)技術(shù)課件_第4頁
第10章 事務(wù)處理、并發(fā)控制與故障恢復(fù)技術(shù)課件_第5頁
已閱讀5頁,還剩172頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第10章事務(wù)處理、并發(fā)控制與故障恢復(fù)技術(shù)10.1事務(wù)處理1第10章事務(wù)處理、并發(fā)控制與故障恢復(fù)技術(shù)10.1事務(wù)10.1事務(wù)處理10.1.1事務(wù)10.1.2事務(wù)的性質(zhì)10.1.3事務(wù)的狀態(tài)10.1.4與事務(wù)有關(guān)的控制語句10.1.5事務(wù)的組成210.1事務(wù)處理210.1.1事務(wù)事務(wù)(transaction)由某個(gè)用戶所執(zhí)行的一個(gè)不能被打斷的對數(shù)據(jù)庫的操作序列被稱為‘事務(wù)’。‘事務(wù)’是應(yīng)用程序訪問數(shù)據(jù)庫的基本邏輯工作單位。‘事務(wù)’通常由一組對于數(shù)據(jù)庫的訪問操作組成,在執(zhí)行過程中按照預(yù)定的次序順序執(zhí)行。一個(gè)‘事務(wù)’的執(zhí)行過程是串行的,它將數(shù)據(jù)庫從一個(gè)舊的一致性狀態(tài)轉(zhuǎn)換到一個(gè)新的一致性狀態(tài)。在‘事務(wù)’的執(zhí)行過程中,數(shù)據(jù)庫中的數(shù)據(jù)可能有不一致的現(xiàn)象,但在‘事務(wù)’執(zhí)行結(jié)束時(shí),系統(tǒng)將保證數(shù)據(jù)庫中數(shù)據(jù)的一致性。310.1.1事務(wù)事務(wù)(transaction)310.1.1事務(wù)[例]銀行的轉(zhuǎn)帳業(yè)務(wù):根據(jù)輸入的兩個(gè)銀行存款帳號A和B,以及轉(zhuǎn)帳金額X,將帳號A的金額減去X,帳號B的金額增加X。其處理過程如下(其中READ(A)表示將帳號A的金額讀入內(nèi)存變量A,WRITE(A)表示將內(nèi)存變量A的值作為帳號A的金額寫入數(shù)據(jù)庫):READ(A);IF(AX)THENBEGINA:=A–X;WRITE(A);READ(B);B:=B+X;WRITE(B);END該事務(wù)的DB訪問操作為:READ(A);WRITE(A);READ(B);WRITE(B);對該事務(wù)而言,數(shù)據(jù)庫中數(shù)據(jù)的一致性就是指:帳號A和帳號B的總金額之和不變410.1.1事務(wù)[例]銀行的轉(zhuǎn)帳業(yè)務(wù):根據(jù)輸入的兩個(gè)銀行10.1.2事務(wù)的性質(zhì)事務(wù)具有四個(gè)特性,簡稱為事務(wù)的ACID

特性,也被稱為事務(wù)的執(zhí)行過程必須滿足的四條準(zhǔn)則。原子性(Atomicity)在一個(gè)事務(wù)中,所有的數(shù)據(jù)庫訪問操作是一個(gè)不可分割的操作序列,這些操作要么全部執(zhí)行結(jié)束,要么一個(gè)都不要執(zhí)行。(例:銀行轉(zhuǎn)帳)數(shù)據(jù)庫管理系統(tǒng)會(huì)自動(dòng)維護(hù)用戶事務(wù)執(zhí)行的原子性。事務(wù)管理子系統(tǒng)事務(wù)日志510.1.2事務(wù)的性質(zhì)事務(wù)具有四個(gè)特性,簡稱為事務(wù)的A10.1.2事務(wù)的性質(zhì)2.一致性(Consistency)一個(gè)事務(wù)的成功執(zhí)行總是將數(shù)據(jù)庫從一個(gè)一致的狀態(tài)轉(zhuǎn)換到另一個(gè)一致的狀態(tài)。數(shù)據(jù)庫的‘狀態(tài)’指數(shù)據(jù)庫中所有數(shù)據(jù)對象的當(dāng)前取值情況。數(shù)據(jù)庫的一致的狀態(tài)可以理解為數(shù)據(jù)庫中所有數(shù)據(jù)的正確性,它要求數(shù)據(jù)庫中的數(shù)據(jù)必須滿足:在數(shù)據(jù)庫中顯式定義的各種完整性約束用戶心目中的隱式數(shù)據(jù)約束610.1.2事務(wù)的性質(zhì)2.一致性(Consistency10.1.2事務(wù)的性質(zhì)2.一致性(續(xù))事務(wù)執(zhí)行的‘一致性’原則基于這樣一個(gè)假設(shè):在一個(gè)事務(wù)開始執(zhí)行之前數(shù)據(jù)庫處于一個(gè)一致的狀態(tài),如果沒有‘其它事務(wù)的干擾和系統(tǒng)故障’,那么當(dāng)該事務(wù)執(zhí)行結(jié)束時(shí)數(shù)據(jù)庫仍然處于一致的狀態(tài)。事務(wù)的‘一致性’特性由兩方面完成DBMS中的‘?dāng)?shù)據(jù)完整性保護(hù)’子系統(tǒng)編寫事務(wù)的應(yīng)用程序員710.1.2事務(wù)的性質(zhì)2.一致性(續(xù))710.1.2事務(wù)的性質(zhì)3.隔離性(Isolation)一個(gè)事務(wù)的執(zhí)行與并發(fā)執(zhí)行的其它事務(wù)之間是相互獨(dú)立的,互不干擾,這被稱為事務(wù)執(zhí)行的‘隔離性’。事務(wù)執(zhí)行的‘隔離性’要求:多個(gè)事務(wù)并發(fā)執(zhí)行的最終結(jié)果,應(yīng)該與它們的某種串行執(zhí)行的最終結(jié)果相等,這被稱為并發(fā)事務(wù)的可串行化。事務(wù)執(zhí)行的‘隔離性’是由DBMS的并發(fā)控制子系統(tǒng)來實(shí)現(xiàn)的。在數(shù)據(jù)庫系統(tǒng)中,當(dāng)多個(gè)事務(wù)并發(fā)執(zhí)行時(shí),每個(gè)事務(wù)都可以看成只有自己在執(zhí)行,只有當(dāng)它與其它事務(wù)發(fā)生封鎖沖突時(shí),才會(huì)感覺到其它事務(wù)的存在。例如:飛機(jī)售票系統(tǒng)810.1.2事務(wù)的性質(zhì)3.隔離性(Isolation)810.1.2事務(wù)的性質(zhì)4.持久性(Durability)一個(gè)事務(wù)一旦完成其全部操作后,它對數(shù)據(jù)庫的所有更新應(yīng)永久地反映在數(shù)據(jù)庫中,即使以后系統(tǒng)發(fā)生故障也應(yīng)保留這個(gè)事務(wù)的執(zhí)行結(jié)果。事務(wù)的‘持久性’是由DBMS的恢復(fù)管理子系統(tǒng)實(shí)現(xiàn)的。數(shù)據(jù)庫管理系統(tǒng)通過其‘事務(wù)管理’子系統(tǒng)(含‘并發(fā)控制’子系統(tǒng))、‘恢復(fù)管理’子系統(tǒng)、‘?dāng)?shù)據(jù)完整性保護(hù)’子系統(tǒng)來實(shí)現(xiàn)事務(wù)的原子性(A)、一致性(C)、隔離性(I)和持久性(D)。910.1.2事務(wù)的性質(zhì)4.持久性(Durability)[例]銀行的轉(zhuǎn)帳業(yè)務(wù):從銀行存款帳號A(當(dāng)前金額10000元)轉(zhuǎn)5000元到銀行存款帳號B(當(dāng)前金額20000元)轉(zhuǎn)帳事務(wù)內(nèi)存變量X帳號A帳號B-10000200001READ(A)toX;100001000020000IF(X5000)THENBEGIN100001000020000X:=X–5000;500010000200002WRITE(X)toA;50005000200003READ(B)toX;20000500020000X:=X+5000;250005000200004WRITE(X)toB;25000500025000END-50002500010[例]銀行的轉(zhuǎn)帳業(yè)務(wù):從銀行存款帳號A(當(dāng)前金額10000元10.1.3事務(wù)的狀態(tài)為了精確地描述一個(gè)事務(wù)的工作過程,我們建立了一個(gè)抽象的事務(wù)模型,以表示事務(wù)的狀態(tài)變遷情況。1110.1.3事務(wù)的狀態(tài)為了精確地描述一個(gè)事務(wù)的工作過程,10.1.3事務(wù)的狀態(tài)‘活動(dòng)’狀態(tài)事務(wù)在開始執(zhí)行后,立即進(jìn)入‘活動(dòng)’狀態(tài)。在‘活動(dòng)’狀態(tài)中,事務(wù)將執(zhí)行對數(shù)據(jù)庫的訪問操作。在DBMS的事務(wù)管理子系統(tǒng)看來,用戶事務(wù)對數(shù)據(jù)庫的訪問操作就是對數(shù)據(jù)庫中數(shù)據(jù)的讀/寫操作?!x’操作:將數(shù)據(jù)讀入用戶事務(wù)的私有工作區(qū)間。如果該數(shù)據(jù)當(dāng)前不在DBMS的系統(tǒng)緩沖區(qū)中,那么DBMS首先將該數(shù)據(jù)從磁盤讀入系統(tǒng)緩沖區(qū),然后再將其拷貝到用戶事務(wù)的私有工作區(qū)?!畬憽僮鳎簩⑿薷暮蟮臄?shù)據(jù)‘寫入’數(shù)據(jù)庫。這里的‘寫’操作并不是立即將數(shù)據(jù)永久性地寫入磁盤,很可能暫時(shí)存放在DBMS的系統(tǒng)緩沖區(qū)中。1210.1.3事務(wù)的狀態(tài)‘活動(dòng)’狀態(tài)1210.1.3事務(wù)的狀態(tài)‘預(yù)提交’狀態(tài)當(dāng)事務(wù)的最后一條訪問語句執(zhí)行結(jié)束之后,事務(wù)進(jìn)入‘預(yù)提交’狀態(tài)。此時(shí)事務(wù)對于數(shù)據(jù)庫的訪問操作雖然已經(jīng)執(zhí)行結(jié)束,但其對于數(shù)據(jù)的修改結(jié)果可能還在內(nèi)存的系統(tǒng)緩沖區(qū)中,必須將其真正寫入數(shù)據(jù)庫的磁盤。事務(wù)在‘預(yù)提交’階段,必須確保將當(dāng)前事務(wù)的所有修改操作的執(zhí)行結(jié)果真正寫入到數(shù)據(jù)庫的磁盤中去。在所有‘寫’磁盤操作執(zhí)行結(jié)束后,事務(wù)就進(jìn)入‘提交’狀態(tài)。在‘預(yù)提交’階段,雖然事務(wù)本身的操作命令已經(jīng)執(zhí)行結(jié)束,但是在寫磁盤的過程中仍然會(huì)發(fā)生系統(tǒng)故障,從而導(dǎo)致當(dāng)前事務(wù)的執(zhí)行失敗。在‘預(yù)提交’失敗后,當(dāng)前事務(wù)也將被放棄(abort),事務(wù)轉(zhuǎn)而進(jìn)入‘失敗’狀態(tài)。1310.1.3事務(wù)的狀態(tài)‘預(yù)提交’狀態(tài)1310.1.3事務(wù)的狀態(tài)‘失敗’狀態(tài)處于‘活動(dòng)’狀態(tài)的事務(wù)在順利到達(dá)并執(zhí)行完最后一條語句之前就中止執(zhí)行,或者在‘預(yù)提交’狀態(tài)下因發(fā)生系統(tǒng)故障而中止執(zhí)行時(shí),我們稱事務(wù)進(jìn)入‘失敗’狀態(tài)。事務(wù)從‘活動(dòng)’狀態(tài)轉(zhuǎn)變?yōu)椤 癄顟B(tài)的原因應(yīng)用程序(或用戶)主動(dòng)放棄(abort)當(dāng)前事務(wù)因并發(fā)控制的原因而被放棄的事務(wù)封鎖申請的超時(shí)等待死鎖發(fā)生系統(tǒng)故障事務(wù)從‘預(yù)提交’狀態(tài)轉(zhuǎn)變?yōu)椤 癄顟B(tài)的原因發(fā)生系統(tǒng)故障1410.1.3事務(wù)的狀態(tài)‘失敗’狀態(tài)1410.1.3事務(wù)的狀態(tài)‘異常中止’狀態(tài)處于‘失敗’狀態(tài)的事務(wù),很可能已對磁盤中的數(shù)據(jù)進(jìn)行了一部分修改。為了保證事務(wù)的原子性,系統(tǒng)應(yīng)該撤消(undo操作)該事務(wù)對數(shù)據(jù)庫已作的修改。在撤消操作完成以后,事務(wù)將被打上一個(gè)放棄的標(biāo)志(aborted),轉(zhuǎn)而進(jìn)入‘異常中止’狀態(tài)?;赝?rollback)對事務(wù)的撤消操作也稱為事務(wù)的‘回退’或‘回滾’。事務(wù)的‘回退’由DBMS的‘恢復(fù)子系統(tǒng)’實(shí)現(xiàn)。在事務(wù)進(jìn)入‘異常中止’狀態(tài)后,系統(tǒng)有兩種選擇:作為一個(gè)新的事務(wù),重新啟動(dòng)取消事務(wù)1510.1.3事務(wù)的狀態(tài)‘異常中止’狀態(tài)1510.1.3事務(wù)的狀態(tài)‘提交’狀態(tài)事務(wù)進(jìn)入‘預(yù)提交’狀態(tài)后,‘并發(fā)控制子系統(tǒng)’將檢查該事務(wù)與并發(fā)執(zhí)行的其它事務(wù)之間是否發(fā)生干擾現(xiàn)象。在檢查通過以后,系統(tǒng)執(zhí)行提交(commit)操作,把對數(shù)據(jù)庫的修改全部寫到磁盤上,并通知系統(tǒng),事務(wù)已成功地結(jié)束,為事務(wù)打上一個(gè)提交標(biāo)志(committed),事務(wù)就進(jìn)入‘提交’狀態(tài)。不論是‘提交’狀態(tài),還是‘異常中止’狀態(tài),都意味著一個(gè)事務(wù)的執(zhí)行結(jié)束。1610.1.3事務(wù)的狀態(tài)‘提交’狀態(tài)不論是‘提交’狀態(tài),10.1.4與事務(wù)有關(guān)的控制語句‘事務(wù)’除了由一組對于數(shù)據(jù)庫的訪問操作構(gòu)成以外,通常還應(yīng)該包括少量的事務(wù)控制語句,用于定義一個(gè)事務(wù)的開始和結(jié)束(包括正常結(jié)束和非正常結(jié)束)。因此,與事務(wù)有關(guān)的控制語句主要有三條:事務(wù)的開始(begintransaction)用于開始一個(gè)事務(wù)。事務(wù)的結(jié)束用于終止一個(gè)事務(wù),包括事務(wù)的正常結(jié)束和非正常結(jié)束。正常結(jié)束提交事務(wù)(committransaction)非正常結(jié)束回退事務(wù)(rollbacktransaction)1710.1.4與事務(wù)有關(guān)的控制語句‘事務(wù)’除了由一組對于數(shù)10.1.4與事務(wù)有關(guān)的控制語句Begintransaction現(xiàn)有的關(guān)系數(shù)據(jù)庫管理系統(tǒng)并沒有提供一個(gè)用于定義從什么時(shí)候開始一個(gè)事務(wù)的控制語句,事務(wù)的啟動(dòng)是隱式的。可以通過三種方式來啟動(dòng)一個(gè)新的事務(wù):數(shù)據(jù)定義命令(DDL)每一條數(shù)據(jù)定義命令都將被作為一個(gè)單獨(dú)的事務(wù)來執(zhí)行。在此之前的用戶事務(wù)將被提動(dòng)提交。將系統(tǒng)設(shè)為自動(dòng)提交方式(打開自動(dòng)提交標(biāo)志)每一條數(shù)據(jù)庫訪問命令都將被作為一個(gè)單獨(dú)的事務(wù)來執(zhí)行,并根據(jù)執(zhí)行結(jié)果自動(dòng)提交或回退。數(shù)據(jù)操縱命令(DML)在當(dāng)前用戶的前一個(gè)事務(wù)執(zhí)行結(jié)束之后提交的第一條數(shù)據(jù)庫訪問操作之前,數(shù)據(jù)庫管理系統(tǒng)將自動(dòng)啟動(dòng)一個(gè)新的事務(wù)。1810.1.4與事務(wù)有關(guān)的控制語句Begintrans10.1.4與事務(wù)有關(guān)的控制語句Committransaction提交當(dāng)前事務(wù),事務(wù)在執(zhí)行過程中對于數(shù)據(jù)庫的所有修改操作都將永久地反應(yīng)到數(shù)據(jù)庫中,并且不可被取消。事務(wù)的提交操作也可能失敗,其原因包括:發(fā)生系統(tǒng)故障在提交階段執(zhí)行的數(shù)據(jù)完整性檢查在事務(wù)提交失敗后,用戶可以通過回退(Rollback)操作來取消當(dāng)前事務(wù)。由系統(tǒng)自動(dòng)提交的事務(wù),如果提交失敗,系統(tǒng)將自動(dòng)執(zhí)行事務(wù)的回退操作。1910.1.4與事務(wù)有關(guān)的控制語句Committran10.1.4與事務(wù)有關(guān)的控制語句Rollbacktransaction取消在該事務(wù)執(zhí)行過程中的所有操作,回滾該事務(wù)至事務(wù)的起點(diǎn),以便重新執(zhí)行或放棄(abort)該事務(wù)。檢查點(diǎn)(savepoint)在事務(wù)的執(zhí)行過程中,系統(tǒng)可以為該事務(wù)設(shè)置若干個(gè)檢查點(diǎn)。用戶事務(wù)可以使用Rollback命令將當(dāng)前事務(wù)回退到前面的某個(gè)檢查點(diǎn)sp,放棄在檢查點(diǎn)sp之后,回退操作之前執(zhí)行的對數(shù)據(jù)庫的所有訪問操作,并繼續(xù)執(zhí)行當(dāng)前事務(wù)。不帶參數(shù)(檢查點(diǎn))的回退操作將結(jié)束并放棄整個(gè)事務(wù)。2010.1.4與事務(wù)有關(guān)的控制語句Rollbacktr10.1.4與事務(wù)有關(guān)的控制語句除了上述三條事務(wù)控制語句外,數(shù)據(jù)庫管理系統(tǒng)通常還會(huì)提供下述幾種與事務(wù)有關(guān)的控制命令(DCL)。設(shè)置事務(wù)的自動(dòng)提交命令SETAUTOCOMMITON|OFF設(shè)置事務(wù)的類型SETTRANSACTIONREADONLY|READWRITE設(shè)置事務(wù)的隔離級別SETTRANSACTIONISOLATIONLEVEL READUNCOMMITTED|READCOMMITTED| READREPEATABLE|SERIALIZABLE上述三條命令并不是事務(wù)的組成部分,只是用于定義新事務(wù)的執(zhí)行方式。2110.1.4與事務(wù)有關(guān)的控制語句除了上述三條事務(wù)控制語句10.1.4與事務(wù)有關(guān)的控制語句SETTRANSACTIONREADONLY|READWRITE定義在這之后啟動(dòng)的所有事務(wù)在執(zhí)行過程中對數(shù)據(jù)庫的訪問方式。READONLY:只讀型事務(wù)在事務(wù)的運(yùn)行過程中只能執(zhí)行對數(shù)據(jù)庫的‘讀’操作,而不能執(zhí)行‘更新’類型的操作。直到定義新的事務(wù)類型READWRITE:讀/寫型事務(wù)在事務(wù)的運(yùn)行過程中可以執(zhí)行對數(shù)據(jù)庫的‘讀/寫’操作。這是事務(wù)的缺省類型定義。2210.1.4與事務(wù)有關(guān)的控制語句SETTRANSAC10.1.4與事務(wù)有關(guān)的控制語句SETTRANSACTIONISOLATIONLEVEL……定義當(dāng)前用戶的事務(wù)與其它并發(fā)執(zhí)行事務(wù)之間的隔離級別。事務(wù)的隔離級別與所采用的封鎖策略緊密相關(guān)。READUNCOMMITTED:未提交讀在該方式下,當(dāng)前事務(wù)不需要申請任何類型的封鎖,因而可能會(huì)‘讀’到未提交的修改結(jié)果禁止一個(gè)事務(wù)以該方式去執(zhí)行對數(shù)據(jù)的‘寫’操作,以避免‘寫’沖突現(xiàn)象。READCOMMITTED:提交讀在‘讀’數(shù)據(jù)對象X之前需要先申請對數(shù)據(jù)對象X的‘共享性’封鎖,在‘讀’操作執(zhí)行結(jié)束之后立即釋放該封鎖。以避免讀取未提交的修改結(jié)果。2310.1.4與事務(wù)有關(guān)的控制語句SETTRANSAC10.1.4與事務(wù)有關(guān)的控制語句READREPEATABLE:可重復(fù)讀在‘讀’數(shù)據(jù)對象X之前需要先申請對數(shù)據(jù)對象X的‘共享性’封鎖,并將該封鎖維持到當(dāng)前事務(wù)的結(jié)束??梢员苊馄渌牟l(fā)事務(wù)對當(dāng)前事務(wù)正在使用的數(shù)據(jù)對象的修改。SERIALIZABLE:可序列化(可串行化)并發(fā)事務(wù)以一種可串行化的調(diào)度策略實(shí)現(xiàn)其并發(fā)執(zhí)行,以避免它們相互之間的干擾現(xiàn)象。不管采用何種隔離級別,在事務(wù)‘寫’數(shù)據(jù)對象X之前需要先申請對數(shù)據(jù)對象X的‘排它性’封鎖,并將該封鎖維持到當(dāng)前事務(wù)的結(jié)束。2410.1.4與事務(wù)有關(guān)的控制語句READREPEATAB10.1.5事務(wù)的組成數(shù)據(jù)對象數(shù)據(jù)對象的大小可以是一個(gè)屬性值、一個(gè)元組、一張表(元組的集合)或整個(gè)數(shù)據(jù)庫,也可以是一個(gè)磁盤塊。在這里我們并不嚴(yán)格區(qū)分它們,而是簡單稱其為‘?dāng)?shù)據(jù)對象A’,或簡稱‘?dāng)?shù)據(jù)A’數(shù)據(jù)對象的地址空間在用戶事務(wù)與數(shù)據(jù)庫進(jìn)行數(shù)據(jù)交換時(shí),存在三種與數(shù)據(jù)有關(guān)的地址空間概念:保存這些數(shù)據(jù)對象的磁盤空間數(shù)據(jù)庫管理系統(tǒng)所使用的內(nèi)存緩沖區(qū)事務(wù)的局部地址空間(內(nèi)存變量)同一個(gè)數(shù)據(jù)對象在不同的地方可能具有不同的值。2510.1.5事務(wù)的組成數(shù)據(jù)對象2510.1.5事務(wù)的組成操作事務(wù)的開始:STARTT0將數(shù)據(jù)對象A的值從磁盤中讀入內(nèi)存緩沖區(qū)INPUT(A)將內(nèi)存緩沖區(qū)中數(shù)據(jù)對象A的值寫入磁盤OUTPUT(A)將內(nèi)存緩沖區(qū)中數(shù)據(jù)對象A的值讀入內(nèi)存變量tREAD(A,t)隱含著一個(gè)INPUT(A)操作將內(nèi)存變量t的值寫入內(nèi)存緩沖區(qū)中數(shù)據(jù)對象AWRITE(A,t)提交事務(wù):COMMITT0回退(放棄)事物:ABORTT02610.1.5事務(wù)的組成操作2610.1.5事務(wù)的組成[例]轉(zhuǎn)帳事務(wù)(A=10000,B=20000,轉(zhuǎn)帳金額5000)STARTT1;READ(A,t);t:=t–5000;WRITE(A,t);READ(B,t);t:=t+5000;WRITE(B,t);OUTPUT(A);OUTPUT(B);COMMITT1;10.2并發(fā)控制2710.1.5事務(wù)的組成[例]轉(zhuǎn)帳事務(wù)(A=10000,[例]銀行的轉(zhuǎn)帳業(yè)務(wù):從銀行存款帳號A(當(dāng)前金額10000元)轉(zhuǎn)5000元到銀行存款帳號B(當(dāng)前金額20000元)轉(zhuǎn)帳事務(wù)內(nèi)存變量X帳號A帳號B-10000200001READ(A)toX;100001000020000IF(X5000)THENBEGIN100001000020000X:=X–5000;500010000200002WRITE(X)toA;50005000200003READ(B)toX;20000500020000X:=X+5000;250005000200004WRITE(X)toB;25000500025000END-50002500028[例]銀行的轉(zhuǎn)帳業(yè)務(wù):從銀行存款帳號A(當(dāng)前金額10000元第10章事務(wù)處理、并發(fā)控制與故障恢復(fù)技術(shù)10.2并發(fā)控制技術(shù)29第10章事務(wù)處理、并發(fā)控制與故障恢復(fù)技術(shù)10.2并發(fā)控10.2并發(fā)控制技術(shù)10.2.1事務(wù)的并發(fā)執(zhí)行10.2.2封鎖10.2.3封鎖協(xié)議10.2.4兩階段封鎖協(xié)議10.2.5封鎖粒度10.2.6活鎖與死鎖3010.2并發(fā)控制技術(shù)3010.2.1事務(wù)的并發(fā)執(zhí)行并發(fā)性數(shù)據(jù)庫是一個(gè)多用戶共享系統(tǒng)多個(gè)事務(wù)的執(zhí)行方式串行執(zhí)行以事務(wù)為單位,多個(gè)事務(wù)依次順序執(zhí)行前一個(gè)事務(wù)對數(shù)據(jù)庫的訪問操作執(zhí)行結(jié)束后,再去處理下一個(gè)事務(wù)對數(shù)據(jù)庫的訪問操作并發(fā)執(zhí)行以事務(wù)為單位,按一定調(diào)度策略同時(shí)執(zhí)行并發(fā)執(zhí)行的可串行化(Serializability)如果一組事務(wù)并發(fā)執(zhí)行的結(jié)果等價(jià)于它們之間的某種串行執(zhí)行的結(jié)果,則稱其為可串行化調(diào)度。用于實(shí)現(xiàn)并發(fā)事務(wù)的可串行化調(diào)度的技術(shù)被稱為并發(fā)控制(ConcurrentControl)技術(shù)。3110.2.1事務(wù)的并發(fā)執(zhí)行并發(fā)性3110.2.1事務(wù)的并發(fā)執(zhí)行3210.2.1事務(wù)的并發(fā)執(zhí)行3210.2.1事務(wù)的并發(fā)執(zhí)行幾個(gè)概念調(diào)度串行調(diào)度可串行化調(diào)度事務(wù)及其調(diào)度的表示方法沖突可串行化沖突優(yōu)先圖沖突可串行性判斷3310.2.1事務(wù)的并發(fā)執(zhí)行幾個(gè)概念3310.2.1事務(wù)的并發(fā)執(zhí)行調(diào)度一個(gè)或多個(gè)事務(wù)中的數(shù)據(jù)庫訪問操作按照它們的執(zhí)行時(shí)間排序形成的一個(gè)操作序列。數(shù)據(jù)庫訪問操作用戶事務(wù)對于數(shù)據(jù)庫的訪問操作包括READ和WRITE,這是事務(wù)對數(shù)據(jù)庫緩沖區(qū)中的數(shù)據(jù)的‘讀’和‘寫’操作。在這里我們忽略了對于磁盤的INPUT和OUTPUT操作。駐留在內(nèi)存緩沖區(qū)中的同一個(gè)數(shù)據(jù)對象A,有可能同時(shí)被若干個(gè)事務(wù)‘讀’或‘寫’。我們在考慮一個(gè)‘調(diào)度’時(shí),最關(guān)心的是這一組事務(wù)以一種什么樣的順序來‘讀/寫’內(nèi)存緩沖區(qū)中的數(shù)據(jù)。同一個(gè)事務(wù)的一組‘讀/寫’操作在‘調(diào)度’中的執(zhí)行順序是固定不變的,但是并發(fā)事務(wù)的不同交叉執(zhí)行方式就構(gòu)成了不同的‘調(diào)度’。3410.2.1事務(wù)的并發(fā)執(zhí)行調(diào)度3410.2.1事務(wù)的并發(fā)執(zhí)行串行調(diào)度如果一個(gè)調(diào)度的操作組成方式如下:首先是一個(gè)事務(wù)的所有操作,然后是另一個(gè)事務(wù)的所有操作,依此類推,則我們稱該調(diào)度是串行的,或稱為‘串行調(diào)度’。任何一個(gè)串行調(diào)度均具有以下性質(zhì)在該調(diào)度中任意取兩個(gè)事務(wù)T1和T2,如果T1的某個(gè)操作在T2的某個(gè)操作之前,則T1的所有操作都在T2的所有操作之前。不存在不同事務(wù)之間的交叉執(zhí)行現(xiàn)象并發(fā)事務(wù)的串行調(diào)度執(zhí)行方式不會(huì)破壞數(shù)據(jù)庫狀態(tài)的一致性3510.2.1事務(wù)的并發(fā)執(zhí)行串行調(diào)度3510.2.1事務(wù)的并發(fā)執(zhí)行例10.1:銀行轉(zhuǎn)賬事務(wù)T1從賬號A轉(zhuǎn)10000至賬號B事務(wù)T2從賬號A轉(zhuǎn)10%的款項(xiàng)至賬號B設(shè)帳號A與帳號B的初值都是20000,數(shù)據(jù)庫狀態(tài)的一致性要求是:A+B=40000,則事務(wù)T1與事務(wù)T2的串行調(diào)度如下:調(diào)度1(圖10.2):T1,T2調(diào)度2(圖10.3):T2,T1在調(diào)度1或調(diào)度2執(zhí)行結(jié)束后,數(shù)據(jù)庫的狀態(tài)是不同的,但都滿足狀態(tài)的一致性要求。3610.2.1事務(wù)的并發(fā)執(zhí)行例10.1:銀行轉(zhuǎn)賬調(diào)度2(圖調(diào)度1(初值:A=B=20000)T1T2TempAB1Read(A)20000200002A:=A-100003Write(A)100004Read(B)5B:=B+100006Write(B)300007Read(A)8Temp:=A*0.110009A:=A-Temp10Write(A)900011Read(B)12B:=B+Temp13Write(B)31000圖10.2串行執(zhí)行之一(結(jié)果:A=9000,B=31000)37調(diào)度1(初值:A=B=20000)T1T2TempAB1Re調(diào)度2(初值:A=B=20000)T1T2TempAB1Read(A)20000200002Temp:=A*0.120003A:=A-Temp4Write(A)180005Read(B)6B:=B+Temp7Write(B)220008Read(A)9A:=A-1000010Write(A)800011Read(B)12B:=B+1000013Write(B)32000圖10.3串行執(zhí)行之二(結(jié)果:A=8000,B=32000)38調(diào)度2(初值:A=B=20000)T1T2TempAB1Re10.2.1事務(wù)的并發(fā)執(zhí)行可串行化調(diào)度每個(gè)串行調(diào)度都將保持?jǐn)?shù)據(jù)庫狀態(tài)的一致性。但也存在其它的調(diào)度(非串行調(diào)度)能夠保證數(shù)據(jù)庫狀態(tài)的一致性。如果一個(gè)調(diào)度對數(shù)據(jù)庫狀態(tài)的影響和某個(gè)串行調(diào)度相同,則我們稱該調(diào)度是可串行化的,或稱為‘可串行化調(diào)度’。例:調(diào)度3(圖10.4):并發(fā)事務(wù)的可串行化調(diào)度等價(jià)于串行調(diào)度1調(diào)度4(圖10.5):不正確的并發(fā)調(diào)度與調(diào)度1和調(diào)度2都不等價(jià)3910.2.1事務(wù)的并發(fā)執(zhí)行可串行化調(diào)度調(diào)度4(圖10.5調(diào)度3(初值:A=B=20000)T1T2xyTempAB1Read(A,x)20000-20000200002x:=x-10000100003Write(A,x)100004Read(A,y)100005Temp:=y*0.110006y:=y-Temp90007Write(A,y)90008Read(B,x)200009x:=x+100003000010Write(B,x)3000011Read(B,y)3000012y:=y+Temp3100013Write(B,y)31000圖10.4并發(fā)執(zhí)行可串行化(結(jié)果:A=9000,B=31000)40調(diào)度3(初值:A=B=20000)T1T2xyTempAB1調(diào)度4(初值:A=B=20000)T1T2xyTempAB1Read(A,x)20000-20000200002x:=x-10000100003Read(A,y)200004Temp:=y*0.120005y:=y-Temp180006Write(A,y)180007Read(B,y)200008Write(A,x)100009Read(B,x)2000010x:=x+100003000011Write(B,x)3000012y:=y+Temp2200013Write(B,y)22000圖10.5不正確的并發(fā)執(zhí)行(結(jié)果:A=10000,B=22000)41調(diào)度4(初值:A=B=20000)T1T2xyTempAB110.2.1事務(wù)的并發(fā)執(zhí)行事務(wù)及調(diào)度的表示方法在事務(wù)的執(zhí)行過程中,我們只關(guān)心它對數(shù)據(jù)庫中的哪些數(shù)據(jù)對象進(jìn)行了讀/寫操作,并不在意每次讀/寫的值是多少,也不關(guān)心在用戶事務(wù)中對這些數(shù)據(jù)對象的值做了怎樣的處理。另外,如果兩個(gè)事務(wù)對同一個(gè)數(shù)據(jù)對象進(jìn)行‘寫’操作,則我們認(rèn)為它們‘寫’后的值總是不相等的。事務(wù)及調(diào)度的記法事務(wù)用符號T1,T2,…表示用ri(X)和wi(X)分別表示事務(wù)Ti讀和寫數(shù)據(jù)庫對象X4210.2.1事務(wù)的并發(fā)執(zhí)行事務(wù)及調(diào)度的表示方法4210.2.1事務(wù)的并發(fā)執(zhí)行事務(wù)及調(diào)度的表示方法(續(xù))例10.1中的兩個(gè)事務(wù)可以分別表示為:事務(wù)T1:r1(A);w1(A);r1(B);w1(B);事務(wù)T2:r2(A);w2(A);r2(B);w2(B);調(diào)度1(圖10.2)可以表示為:r1(A);w1(A);r1(B);w1(B);r2(A);w2(A);r2(B);w2(B);該串行調(diào)度可以簡化表示為:T1,T2調(diào)度2(圖10.3)可以表示為:r2(A);w2(A);r2(B);w2(B);r1(A);w1(A);r1(B);w1(B);該串行調(diào)度可以簡化表示為:T2,T14310.2.1事務(wù)的并發(fā)執(zhí)行事務(wù)及調(diào)度的表示方法(續(xù))調(diào)度10.2.1事務(wù)的并發(fā)執(zhí)行事務(wù)及調(diào)度的表示方法(續(xù))例10.1中的兩個(gè)事務(wù)可以分別表示為:事務(wù)T1:r1(A);w1(A);r1(B);w1(B);事務(wù)T2:r2(A);w2(A);r2(B);w2(B);調(diào)度3(圖10.4)可以表示為:r1(A);w1(A);r2(A);w2(A);r1(B);w1(B);r2(B);w2(B);調(diào)度4(圖10.5)可以表示為:r1(A);r2(A);w2(A);r2(B);w1(A);r1(B);w1(B);w2(B);4410.2.1事務(wù)的并發(fā)執(zhí)行事務(wù)及調(diào)度的表示方法(續(xù))調(diào)度10.2.1事務(wù)的并發(fā)執(zhí)行沖突可串行化沖突調(diào)度中一對連續(xù)的操作(op1;op2),它們滿足:如果它們的順序交換,那么涉及的事務(wù)中至少有一個(gè)的行為會(huì)改變符合上述條件的一對連續(xù)的操作(op1;op2)被稱為‘沖突’4510.2.1事務(wù)的并發(fā)執(zhí)行沖突可串行化4510.2.1事務(wù)的并發(fā)執(zhí)行沖突可串行化(續(xù))沖突的判斷假設(shè)Ti和Tj是兩個(gè)不同的事務(wù)(即ij),則:ri(X);rj(Y)不是沖突(即使X=Y也不會(huì)是沖突)如果XY,則ri(X);wj(Y)不會(huì)是沖突如果XY,則wi(X);rj(Y)不會(huì)是沖突如果XY,則wi(X);wj(Y)不會(huì)是沖突同一事務(wù)的任意兩個(gè)相鄰的操作都是沖突,如: ri(X);wi(Y)、wi(X);ri(Y)、ri(X);ri(Y)等不同事務(wù)對同一數(shù)據(jù)對象的‘寫’沖突: wi(X);wj(X)不同事務(wù)對同一數(shù)據(jù)對象的‘讀-寫’沖突: ri(X);wj(X) wi(X);rj(X)4610.2.1事務(wù)的并發(fā)執(zhí)行沖突可串行化(續(xù))4610.2.1事務(wù)的并發(fā)執(zhí)行沖突可串行化(續(xù))概括起來講同一事務(wù)中的任意兩個(gè)操作不可以交換它們的順序不同事務(wù)中的任何兩個(gè)操作在順序上可以交換,除非:它們涉及同一個(gè)數(shù)據(jù)對象;并且至少有一個(gè)是‘寫’操作對于初始給定的一個(gè)調(diào)度,如果通過一組‘非沖突’操作的交換,能夠?qū)⒃撜{(diào)度轉(zhuǎn)換為一個(gè)串行調(diào)度,則我們認(rèn)為最初的調(diào)度就是一個(gè)可串行化調(diào)度。4710.2.1事務(wù)的并發(fā)執(zhí)行沖突可串行化(續(xù))4710.2.1事務(wù)的并發(fā)執(zhí)行沖突可串行化(續(xù))沖突等價(jià)如果通過一系列相鄰操作的非沖突交換能夠?qū)⒁粋€(gè)調(diào)度轉(zhuǎn)換為另一個(gè)調(diào)度,則我們稱這兩個(gè)調(diào)度是沖突等價(jià)的。沖突可串行化如果一個(gè)調(diào)度S沖突等價(jià)于一個(gè)串行調(diào)度,則我們稱調(diào)度S是沖突可串行化的。‘沖突可串行化’是‘可串行化’的一個(gè)充分條件,而非必要條件。一個(gè)‘沖突可串行化’調(diào)度必定是一個(gè)‘可串行化’調(diào)度一個(gè)‘可串行化’調(diào)度并不一定是‘沖突可串行化’的4810.2.1事務(wù)的并發(fā)執(zhí)行沖突可串行化(續(xù))4810.2.1事務(wù)的并發(fā)執(zhí)行例:將調(diào)度3通過非沖突交換轉(zhuǎn)換成一個(gè)串行調(diào)度1(被標(biāo)為紅色的是一對非沖突操作)步驟1:r1(A);w1(A);r2(A);w2(A);r1(B);w1(B);r2(B);w2(B);步驟2:r1(A);w1(A);r2(A);r1(B);w2(A);w1(B);r2(B);w2(B);步驟3:r1(A);w1(A);r1(B);r2(A);w2(A);w1(B);r2(B);w2(B);步驟4:r1(A);w1(A);r1(B);r2(A);w1(B);w2(A);r2(B);w2(B);步驟5:r1(A);w1(A);r1(B);w1(B);r2(A);w2(A);r2(B);w2(B);4910.2.1事務(wù)的并發(fā)執(zhí)行例:將調(diào)度3通過非沖突交換轉(zhuǎn)換10.2.1事務(wù)的并發(fā)執(zhí)行優(yōu)先圖思想:沖突操作反映了給定事務(wù)在沖突等價(jià)的串行調(diào)度中的執(zhí)行順序。定義:已知在調(diào)度S中存在兩個(gè)事務(wù)T1和T2,如果有T1的一個(gè)動(dòng)作A1和T2的一個(gè)動(dòng)作A2滿足:在調(diào)度S中A1在A2前A1和A2涉及數(shù)據(jù)庫中的同一數(shù)據(jù)對象,且至少有一個(gè)是‘寫’動(dòng)作則我們稱T1優(yōu)先于T2,記為T1<sT2在上述情況下,A1和A2是兩個(gè)不能交換的動(dòng)作,如果存在一個(gè)沖突等價(jià)于S的串行調(diào)度,則在該串行調(diào)度中T1必在T2之前。5010.2.1事務(wù)的并發(fā)執(zhí)行優(yōu)先圖5010.2.1事務(wù)的并發(fā)執(zhí)行優(yōu)先圖定義[優(yōu)先圖]以調(diào)度S中的事務(wù)Ti作為優(yōu)先圖中的結(jié)點(diǎn)(可簡記為i),如果Ti<sTj,則從結(jié)點(diǎn)i到結(jié)點(diǎn)j引一條有向邊。依此類推構(gòu)成的一個(gè)有向圖稱為調(diào)度S的事務(wù)優(yōu)先圖。例:r2(A);r1(B);w2(A);r3(A);w1(B);w3(A);r2(B);w2(B)其優(yōu)先圖是:1→2→3例:r2(A);r1(B);w2(A);r2(B);r3(A);w1(B);w3(A);w2(B)其優(yōu)先圖是:1→2→35110.2.1事務(wù)的并發(fā)執(zhí)行優(yōu)先圖例:r2(A);r1(B10.2.1事務(wù)的并發(fā)執(zhí)行沖突可串行化的判斷規(guī)則構(gòu)造調(diào)度S的事務(wù)優(yōu)先圖,如果該圖是無環(huán)的,則調(diào)度S是沖突可串行化的。如果有環(huán),則調(diào)度S不是沖突可串行化的。例:r2(A);r1(B);w2(A);r3(A);w1(B);w3(A);r2(B);w2(B)其優(yōu)先圖是:1→2→3例:r2(A);r1(B);w2(A);r2(B);r3(A);w1(B);w3(A);w2(B)其優(yōu)先圖是:1→2→35210.2.1事務(wù)的并發(fā)執(zhí)行沖突可串行化的判斷規(guī)則例:r2[結(jié)論1]如果在優(yōu)先圖中存在環(huán),則該調(diào)度不是沖突可串行化的。證明(反證法):設(shè)存在一個(gè)涉及n個(gè)事務(wù)的調(diào)度S的優(yōu)先圖中的環(huán):T1→T2→……→Tn→T1,假設(shè)其存在一個(gè)沖突等價(jià)的串行調(diào)度S’∵在優(yōu)先圖中T1優(yōu)先于T2的前提條件是存在T1的一個(gè)動(dòng)作A1和T2的一個(gè)動(dòng)作A2,在調(diào)度S中A1先于A2,且A1與A2不可交換(沖突)∴在調(diào)度S’中,A1也應(yīng)先于A2。即在串行調(diào)度S’中T1應(yīng)該先于T2執(zhí)行。依此類推:T1先于T2,T2先于T3,…,Tn-1先于Tn,Tn先于T1∴得到一對矛盾的關(guān)系:T1先于Tn,Tn先于T1∴假設(shè)不成立,該調(diào)度S不可能存在一個(gè)沖突等價(jià)的串行調(diào)度,即不是沖突可串行化的。53[結(jié)論1]如果在優(yōu)先圖中存在環(huán),則該調(diào)度不是沖突可串行化的。[結(jié)論2]如果調(diào)度S的優(yōu)先圖中無環(huán),則調(diào)度S是沖突可串行化的。證明(歸納法)設(shè)由n個(gè)事務(wù)T1,T2,……,Tn構(gòu)成一個(gè)調(diào)度Sn當(dāng)n=1時(shí),調(diào)度S1只有一個(gè)事務(wù)組成,因此S1是一個(gè)串行調(diào)度,因而也是沖突可串行化的。假設(shè)n=(k-1)時(shí)結(jié)論成立,即:如果存在一個(gè)由(k-1)個(gè)事務(wù)T1,T2,……,Tk-1所構(gòu)成的調(diào)度Sk-1,其事務(wù)優(yōu)先圖是無環(huán)的,則調(diào)度Sk-1是沖突可串行化的,即調(diào)度Sk-1沖突等價(jià)于它們的某個(gè)串行調(diào)度S’k-1。當(dāng)n=k時(shí),如果由k個(gè)事務(wù)T1,T2,……,Tk所構(gòu)成的調(diào)度Sk的事務(wù)優(yōu)先圖G是無環(huán)的。54[結(jié)論2]如果調(diào)度S的優(yōu)先圖中無環(huán),則調(diào)度S是沖突可串行化的結(jié)論2的證明(續(xù))∵優(yōu)先圖G是一個(gè)有向無環(huán)圖∴在圖G中至少存在一個(gè)結(jié)點(diǎn)i(事務(wù)Ti所對應(yīng)的結(jié)點(diǎn)),不存在指向該結(jié)點(diǎn)的有向邊∴在調(diào)度Sk中不存在這樣一個(gè)動(dòng)作A:是Ti之外的某個(gè)事務(wù)Tj的動(dòng)作;動(dòng)作A位于Ti的某個(gè)動(dòng)作Ai之前;動(dòng)作A與動(dòng)作Ai是沖突。∴可以通過非沖突動(dòng)作的交換將事務(wù)Ti的所有動(dòng)作交換到調(diào)度Sk的最前面,并保持它們的原有順序不變。即將調(diào)度Sk轉(zhuǎn)換成下述的調(diào)度S’k:(Ti的所有動(dòng)作)(其它k-1個(gè)事務(wù)的動(dòng)作)且調(diào)度Sk與調(diào)度S’k是沖突等價(jià)的。55結(jié)論2的證明(續(xù))∵優(yōu)先圖G是一個(gè)有向無環(huán)圖55結(jié)論2的證明(續(xù))考慮調(diào)度S’k的后半部分:由Ti之外的其它(k-1)個(gè)事務(wù)中的動(dòng)作所構(gòu)成的調(diào)度Sk-1∵調(diào)度Sk-1中的所有動(dòng)作均保持了它們在調(diào)度Sk中的排列順序∴從優(yōu)先圖G中去掉結(jié)點(diǎn)i以及從結(jié)點(diǎn)i引出的所有有向邊,就構(gòu)成了調(diào)度Sk-1的事務(wù)優(yōu)先圖G’(即:圖G’是圖G的一個(gè)子圖)∵圖G是有向無環(huán)圖∴圖G’也是一個(gè)有向無環(huán)圖根據(jù)步驟2的假設(shè):如果由(k-1)個(gè)事務(wù)所構(gòu)成的調(diào)度的事務(wù)優(yōu)先圖是無環(huán)的,則該調(diào)度是沖突可串行化的。∴上述的調(diào)度Sk-1是沖突可串行化的,即調(diào)度Sk-1沖突等價(jià)于這(k-1)個(gè)事務(wù)的某個(gè)串行調(diào)度S’k-156結(jié)論2的證明(續(xù))考慮調(diào)度S’k的后半部分:由Ti之外的其它結(jié)論2的證明(續(xù))∵ 調(diào)度S’k等于:事務(wù)Ti的所有動(dòng)作+調(diào)度Sk-1 調(diào)度Sk-1沖突等價(jià)于某個(gè)串行調(diào)度S’k-1∴ 調(diào)度S’k沖突等價(jià)于一個(gè)串行調(diào)度(Ti,S’k-1)∵ 調(diào)度Sk沖突等價(jià)于調(diào)度S’k 調(diào)度S’k沖突等價(jià)于串行調(diào)度(Ti,S’k-1)∴ 調(diào)度Sk沖突等價(jià)于串行調(diào)度(Ti,S’k-1)∴ 調(diào)度Sk是沖突可串行化的。 證畢。57結(jié)論2的證明(續(xù))∵ 調(diào)度S’k等于:事務(wù)Ti的所有10.2.1事務(wù)的并發(fā)執(zhí)行三種數(shù)據(jù)不一致現(xiàn)象在事務(wù)的并發(fā)運(yùn)行過程中,如果采用了不合理的調(diào)度方法,就會(huì)出現(xiàn)并發(fā)執(zhí)行錯(cuò)誤,破壞數(shù)據(jù)庫中數(shù)據(jù)的一致性。常見的并發(fā)執(zhí)行錯(cuò)誤有三種:丟失修改(lostupdata)臟讀(dirtyread)不可重復(fù)讀(non-repeatableread)例:飛機(jī)售票業(yè)務(wù)假設(shè)某個(gè)航班的剩余機(jī)票的張數(shù)保存在數(shù)據(jù)庫對象X(初始值為5)中,則出售一張?jiān)摵桨鄼C(jī)票的事務(wù)的執(zhí)行流程是:Read(X,t); /*t是該事務(wù)使用的內(nèi)存變量*/t:=t–1;Write(X,t);5810.2.1事務(wù)的并發(fā)執(zhí)行三種數(shù)據(jù)不一致現(xiàn)象例:飛機(jī)售票丟失修改現(xiàn)象一個(gè)事務(wù)的修改結(jié)果破壞了另一個(gè)事務(wù)的修改結(jié)果原因?qū)Χ鄠€(gè)事務(wù)并發(fā)修改同一個(gè)數(shù)據(jù)對象的情況未加控制步驟甲售票點(diǎn)變量t1乙售票點(diǎn)變量t2剩余機(jī)票X1Read(X,t1);552t1:=t1–1;43Read(X,t2);54t1:=t2–1;45Write(X,t1);46Write(X,t2);459丟失修改現(xiàn)象步驟甲售票點(diǎn)變量t1乙售票點(diǎn)變量t2剩余機(jī)票X1臟讀現(xiàn)象讀到了錯(cuò)誤的數(shù)據(jù)(即與數(shù)據(jù)庫中的情況不相符的數(shù)據(jù))原因一個(gè)事務(wù)讀取了另一個(gè)事務(wù)未提交的修改結(jié)果步驟甲售票點(diǎn)變量t1乙售票點(diǎn)變量t2剩余機(jī)票X1Read(X,t1);552t1:=t1–1;43Write(X,t1);444Read(X,t2);45放棄當(dāng)前的售票操作,取消對X的修改560臟讀現(xiàn)象步驟甲售票點(diǎn)變量t1乙售票點(diǎn)變量t2剩余機(jī)票X1Re不可重復(fù)讀現(xiàn)象在一個(gè)事務(wù)的執(zhí)行過程中,前后兩次讀同一個(gè)數(shù)據(jù)對象所獲得的值出現(xiàn)了不一致。原因在兩次‘讀’操作之間插入了另一個(gè)事務(wù)的‘寫’操作步驟甲售票點(diǎn)變量t1乙售票點(diǎn)變量t2剩余機(jī)票X1Read(X,t1);552Read(X,t2);53t2:=t2–1;44Write(X,t2);445Read(X,t1);461不可重復(fù)讀現(xiàn)象步驟甲售票點(diǎn)變量t1乙售票點(diǎn)變量t2剩余機(jī)票X10.2.1事務(wù)的并發(fā)執(zhí)行出現(xiàn)上述三種數(shù)據(jù)不一致現(xiàn)象的原因在于:多個(gè)并發(fā)執(zhí)行的事務(wù)反復(fù)交叉使用同一個(gè)數(shù)據(jù)庫(數(shù)據(jù)對象),而數(shù)據(jù)庫管理系統(tǒng)又沒有提供必要的控制手段。合理組織調(diào)度多個(gè)用戶的并發(fā)操作,避免產(chǎn)生數(shù)據(jù)的不一致現(xiàn)象的工作也被稱為‘并發(fā)控制’。常用的并發(fā)控制技術(shù)是:封鎖6210.2.1事務(wù)的并發(fā)執(zhí)行出現(xiàn)上述三種數(shù)據(jù)不一致現(xiàn)象的原10.2.1事務(wù)的并發(fā)執(zhí)行幾個(gè)概念并發(fā)性并發(fā)控制調(diào)度串行調(diào)度可串行化調(diào)度沖突可串行化沖突優(yōu)先圖沖突可串行性判斷三種數(shù)據(jù)不一致現(xiàn)象6310.2.1事務(wù)的并發(fā)執(zhí)行幾個(gè)概念6310.2并發(fā)控制技術(shù)10.2.1事務(wù)的并發(fā)執(zhí)行10.2.2封鎖10.2.3封鎖協(xié)議10.2.4兩階段封鎖協(xié)議10.2.5封鎖粒度10.2.6活鎖與死鎖6410.2并發(fā)控制技術(shù)6410.2.2封鎖主要內(nèi)容封鎖(lock)封鎖類型常用的兩種類型封鎖鎖相容矩陣申請封鎖和釋放封鎖的處理過程使用封鎖技術(shù)實(shí)現(xiàn)并發(fā)控制的方法6510.2.2封鎖主要內(nèi)容6510.2.2封鎖封鎖(lock)使用封鎖技術(shù)的前提在一個(gè)事務(wù)訪問數(shù)據(jù)庫中的數(shù)據(jù)時(shí),必須先獲得相應(yīng)的訪問對象上的封鎖,以保證數(shù)據(jù)訪問操作的正確性和一致性。封鎖的作用在一段時(shí)間內(nèi)禁止其它事務(wù)在被封鎖的數(shù)據(jù)對象上執(zhí)行某些類型的操作。由封鎖的類型決定同時(shí)也表明:持有該封鎖的事務(wù)在被封鎖的數(shù)據(jù)對象上將要執(zhí)行什么類型的操作。由系統(tǒng)所采用的封鎖協(xié)議來決定‘封鎖’是多用戶環(huán)境中最常采用的一種并發(fā)控制技術(shù)6610.2.2封鎖封鎖(lock)6610.2.2封鎖封鎖類型常用的封鎖類型有兩種排它鎖eXclusivelock,又簡稱為:X鎖共享鎖

Sharinglock,又簡稱為:S鎖6710.2.2封鎖封鎖類型6710.2.2封鎖排它鎖(X鎖)特性只有當(dāng)數(shù)據(jù)對象A沒有被其它事務(wù)封鎖時(shí),事務(wù)T才能在數(shù)據(jù)對象A上施加‘X鎖’;如果事務(wù)T在數(shù)據(jù)對象A上施加了‘X鎖’,則其它任何事務(wù)都不能在數(shù)據(jù)對象A上再施加任何類型的封鎖。作用如果一個(gè)事務(wù)T申請?jiān)跀?shù)據(jù)對象A上施加‘X鎖’并得到滿足,則:事務(wù)T自身可以對數(shù)據(jù)對象A作讀、寫操作,而其它事務(wù)則被禁止訪問數(shù)據(jù)對象A。這樣可以讓事務(wù)T獨(dú)占該數(shù)據(jù)對象A,從而保證了事務(wù)T對數(shù)據(jù)對象A的訪問操作的正確性和一致性。缺點(diǎn):降低了整個(gè)系統(tǒng)的并行性‘X鎖’必須維持到事務(wù)T的執(zhí)行結(jié)束6810.2.2封鎖排它鎖(X鎖)6810.2.2封鎖共享鎖(S鎖)特性如果數(shù)據(jù)對象A沒有被其它事務(wù)封鎖,或者其它事務(wù)僅僅以‘S鎖’的方式來封鎖數(shù)據(jù)對象A時(shí),事務(wù)T才能在數(shù)據(jù)對象A上施加‘S鎖’;作用如果一個(gè)事務(wù)T申請?jiān)跀?shù)據(jù)對象A上施加‘S鎖’并得到滿足,則:事務(wù)T可以對‘讀’數(shù)據(jù)對象A,但不能‘寫’數(shù)據(jù)對象A。不同事務(wù)所申請的‘S鎖’可以共存于同一個(gè)數(shù)據(jù)對象A上,從而保證了多個(gè)事務(wù)可以同時(shí)‘讀’數(shù)據(jù)對象A,有利于提高整個(gè)系統(tǒng)的并發(fā)性在持有封鎖的事務(wù)釋放數(shù)據(jù)對象A上的所有‘S鎖’之前,任何事務(wù)都不能‘寫’數(shù)據(jù)對象A‘S鎖’不必維持到事務(wù)T的執(zhí)行結(jié)束6910.2.2封鎖共享鎖(S鎖)6910.2.2封鎖‘排它鎖’與‘共享鎖’的相互關(guān)系可以用如下圖所示的‘鎖相容矩陣’來表示。其它事務(wù)已持有的鎖X鎖S鎖-當(dāng)前事務(wù)申請的鎖X鎖NoNoYesS鎖NoYesYes合適(wellformed)事務(wù)如果一個(gè)事務(wù)在訪問數(shù)據(jù)庫中的數(shù)據(jù)對象A之前按照要求申請對A的封鎖,在操作結(jié)束后釋放A上的封鎖,這種事務(wù)被稱為合適事務(wù)?!线m事務(wù)’是保證并發(fā)事務(wù)的正確執(zhí)行的基本條件。圖10.9

封鎖的相容矩陣7010.2.2封鎖‘排它鎖’與‘共享鎖’的相互關(guān)系可以用如10.2.2封鎖封鎖的申請與釋放封鎖管理器的數(shù)據(jù)結(jié)構(gòu)數(shù)組LOCK(A)記錄被施加在數(shù)據(jù)對象A上的封鎖類型,其值是:Read_locked(共享鎖)Write_locked(排它鎖)Unlocked(無封鎖)數(shù)組no_of_reads(A)記錄被施加在數(shù)據(jù)對象A上的共享鎖的個(gè)數(shù)7110.2.2封鎖封鎖的申請與釋放71申請對數(shù)據(jù)對象A的共享鎖(S鎖):read_lock(A)B:ifLOCK(A)=‘Unlocked'{ LOCK(A):=‘Read_locked'; no_of_reads(A):=1; }else{ ifLOCK(A)=‘Read_locked’ no_of_reads(A):=no_of_reads(A)+1; else { wait(untilLOCK(A)!=‘Write_locked' andthelockmanagerwakesup thetransaction); gotoB; } }72申請對數(shù)據(jù)對象A的共享鎖(S鎖):read_lock(A)B申請對數(shù)據(jù)對象A的排它鎖(X鎖):write_lock(A)B: ifLOCK(A)=‘Unlocked’ { LOCK(A):=‘Write_locked'; } else { wait(untilLOCK(A)=‘Unlocked‘a(chǎn)ndthelock managerwakesupthetransaction); gotoB; }73申請對數(shù)據(jù)對象A的排它鎖(X鎖):write_lock(A)釋放對數(shù)據(jù)對象A的封鎖:unlock(A)ifLOCK(A)=‘Write_locked’{ LOCK(A):=‘Unlocked'; wakeuponeofthewaitingtransaction,ifany}elseifLOCK(A)=‘Read_locked'{ no_of_reads(A):=no_of_reads(A)-1; ifno_of_reads(A)=0 { LOCK(A):=‘Unlocked' wakeuponeofthewaitingtransaction,ifany }}74釋放對數(shù)據(jù)對象A的封鎖:unlock(A)ifLOCK(10.2.2封鎖使用封鎖的并發(fā)控制技術(shù)在DBMS的‘封鎖管理器’中維護(hù)著一張‘鎖表’,以記錄當(dāng)前:封鎖的持有情況有哪些‘事務(wù)’在哪些‘?dāng)?shù)據(jù)對象’上持有什么類型的‘封鎖’封鎖的申請情況有哪些‘事務(wù)’正在申請哪些‘?dāng)?shù)據(jù)對象’上的什么類型的‘封鎖’DBMS對于用戶事務(wù)的數(shù)據(jù)訪問操作Op(A)的處理過程如下:7510.2.2封鎖使用封鎖的并發(fā)控制技術(shù)75事務(wù)的數(shù)據(jù)訪問操作的處理過程將訪問操作Op(A)發(fā)送給并發(fā)控制子系統(tǒng)的‘調(diào)度器’;‘調(diào)度器’根據(jù)系統(tǒng)采用的封鎖協(xié)議來決定:是否需要為該操作申請封鎖申請何種類型的封鎖 并將封鎖申請發(fā)送給‘封鎖管理器’;‘封鎖管理器’根據(jù)鎖表中記載的情況來決定是否能夠立即滿足該封鎖申請,并將申請結(jié)果返回給‘調(diào)度器’如果封鎖申請得不到滿足,則‘調(diào)度器’將訪問操作Op(A)放入‘被推遲的訪問操作’隊(duì)列,否則將該操作發(fā)送給系統(tǒng)的執(zhí)行引擎執(zhí)行。76事務(wù)的數(shù)據(jù)訪問操作的處理過程將訪問操作Op(A)發(fā)送給并發(fā)控事務(wù)的數(shù)據(jù)訪問操作的處理過程(圖)77事務(wù)的數(shù)據(jù)訪問操作的處理過程(圖)7710.2并發(fā)控制技術(shù)10.2.1事務(wù)的并發(fā)執(zhí)行10.2.2封鎖10.2.3封鎖協(xié)議10.2.4兩階段封鎖協(xié)議10.2.5封鎖粒度10.2.6活鎖與死鎖7810.2并發(fā)控制技術(shù)7810.2.3封鎖協(xié)議采用‘封鎖’技術(shù)為并發(fā)事務(wù)的正確執(zhí)行提供了可能性。但是要真正確保事務(wù)并發(fā)執(zhí)行的正確性,還必須按照規(guī)定的方法來使用‘封鎖’技術(shù),即規(guī)定事務(wù)使用‘封鎖’的方式。包括:何時(shí)申請封鎖?申請何種類型的封鎖?(S鎖/X鎖)何時(shí)釋放所持有的封鎖?封鎖協(xié)議(lockingprotocol)不同的封鎖方式構(gòu)成了不同的封鎖規(guī)則,我們稱之為‘封鎖協(xié)議’。三級封鎖協(xié)議不同級別的封鎖協(xié)議可以防止不同的并發(fā)錯(cuò)誤兩階段封鎖協(xié)議7910.2.3封鎖協(xié)議采用‘封鎖’技術(shù)為并發(fā)事務(wù)的正確執(zhí)行10.2.3封鎖協(xié)議一級封鎖協(xié)議事務(wù)T在‘寫’數(shù)據(jù)對象A之前,必須先申請并獲得A上的‘X鎖’,并維持到事務(wù)T的執(zhí)行結(jié)束(包括Commit與Rollback)才釋放被加在A上的‘X鎖’。二級封鎖協(xié)議‘一級封鎖協(xié)議’的要求;并且事務(wù)T在‘讀’數(shù)據(jù)對象A之前,必須先申請并獲得A上的‘S鎖’,在‘讀’操作完成后即可釋放被加在A上的‘S鎖’。這里沒有規(guī)定釋放‘S鎖’的時(shí)間三級封鎖協(xié)議‘一級封鎖協(xié)議’的要求;并且事務(wù)T在‘讀’數(shù)據(jù)對象A之前,必須先申請并獲得A上的‘S鎖’,并維持到事務(wù)T的執(zhí)行結(jié)束(包括Commit與Rollback)才釋放被加在A上的‘S鎖’。8010.2.3封鎖協(xié)議一級封鎖協(xié)議二級封鎖協(xié)議三級封鎖協(xié)議‘一級封鎖協(xié)議’可防止‘丟失修改’現(xiàn)象步驟甲售票點(diǎn)乙售票點(diǎn)剩余機(jī)票X1write_lock(X);52Read(X,t1);3write_lock(X);4t1:=t1–1;wait……5Write(X,t1);wait……46Commit;wait……7unlock(X);wait……8Read(X,t2);9t1:=t2–1;10Write(X,t2);311Commit;12unlock(X);81‘一級封鎖協(xié)議’可防止‘丟失修改’現(xiàn)象步驟甲售票點(diǎn)乙售票點(diǎn)?!壏怄i協(xié)議’可防止‘丟失修改、臟讀’現(xiàn)象步驟甲售票點(diǎn)變量t1乙售票點(diǎn)變量t2剩余機(jī)票X1write_lock(X);52Read(X,t1);53t1:=t1–1;44Write(X,t1);45write_lock(X);6wait……7Rollbackwait……58unlock(X);wait……9Read(X,t1);5……82‘二級封鎖協(xié)議’可防止‘丟失修改、臟讀’現(xiàn)象步驟甲售票點(diǎn)變量‘三級封鎖協(xié)議’可防止‘丟失修改、臟讀、不可重復(fù)讀’現(xiàn)象步驟甲售票點(diǎn)變量t1乙售票點(diǎn)變量t2剩余機(jī)票X1read_lock(X);52Read(X,t1);53write_lock(X);4……wait……5Read(X,t1);5wait……6Commit;wait……7unlock(X);wait……8Read(X,t2);59……83‘三級封鎖協(xié)議’可防止‘丟失修改、臟讀、不可重復(fù)讀’現(xiàn)象步驟‘三級封鎖協(xié)議’與三種數(shù)據(jù)不一致現(xiàn)象的關(guān)系可能出現(xiàn)的數(shù)據(jù)不一致現(xiàn)象丟失修改臟讀不可重復(fù)讀封鎖協(xié)議一級封鎖協(xié)議NoYesYes二級封鎖協(xié)議NoNoYes三級封鎖協(xié)議NoNoNo根據(jù)對于封鎖協(xié)議的介紹我們可以得知,多個(gè)事務(wù)的并發(fā)運(yùn)行之所以會(huì)破壞數(shù)據(jù)庫狀態(tài)的一致性,其原因是:事務(wù)沒有為被訪問的數(shù)據(jù)對象申請封鎖事務(wù)沒有在合適的時(shí)候釋放所持有的鎖‘三級封鎖協(xié)議’正是為解決上述問題而定義的封鎖規(guī)則。84‘三級封鎖協(xié)議’與三種數(shù)據(jù)不一致現(xiàn)象的關(guān)系可能出現(xiàn)的數(shù)據(jù)不一10.2并發(fā)控制技術(shù)10.2.1事務(wù)的并發(fā)執(zhí)行10.2.2封鎖10.2.3封鎖協(xié)議10.2.4兩階段封鎖協(xié)議10.2.5封鎖粒度10.2.6活鎖與死鎖8510.2并發(fā)控制技術(shù)8510.2.4兩階段封鎖協(xié)議采用‘三級封鎖協(xié)議’可以保證事務(wù)并發(fā)執(zhí)行的正確性。按照‘三級封鎖協(xié)議’的規(guī)定,事務(wù)T在其執(zhí)行過程中所申請的所有‘鎖’必須在事務(wù)T結(jié)束后才能釋放。這就意味著,在一個(gè)事務(wù)執(zhí)行過程中,必須把鎖的申請與釋放分為兩個(gè)階段:第一個(gè)階段:申請并獲得封鎖在此階段中,事務(wù)可以申請其整個(gè)執(zhí)行過程中所需要的鎖,此階段也可稱為‘?dāng)U展階段’第二階段:釋放所有申請獲得的鎖此階段也可稱為‘收縮階段’事務(wù)一旦開始釋放封鎖,那么就不能再申請任何封鎖此種設(shè)置封鎖的方法稱為‘兩階段封鎖協(xié)議’two-phaselockingprotocol,簡稱2PL協(xié)議8610.2.4兩階段封鎖協(xié)議采用‘三級封鎖協(xié)議’可以保證事10.2.4兩階段封鎖協(xié)議兩階段封鎖事務(wù)在一個(gè)事務(wù)T中,如果所有的封鎖請求都先于所有的解鎖請求,則該事務(wù)被稱為‘兩階段封鎖事務(wù)’,簡稱‘2PL事務(wù)’2PL事務(wù)的例子(圖10.13)事務(wù)T:sl(A);sl(B);sl(C);……;u(B);u(A);u(C);

擴(kuò)展階段收縮階段用sl(A)表示申請對A的‘S鎖’,用xl(A)表示申請對A的‘X鎖’,用u(A)表示釋放A上的封鎖不遵守2PL協(xié)議的例子(圖10.14)事務(wù)T’:sl(A);u(A);sl(B);xl(C);……;u(C);u(B)8710.2.4兩階段封鎖協(xié)議兩階段封鎖事務(wù)2PL事務(wù)的例子10.2.4兩階段封鎖協(xié)議基于前述的‘三級封鎖協(xié)議’和‘兩階段封鎖協(xié)議’的要求,我們歸納出有關(guān)封鎖技術(shù)的使用規(guī)定假設(shè)系統(tǒng)采用‘X鎖’和‘S鎖’兩種類型鎖,有關(guān)封鎖的申請與釋放操作表示如下:sli(A):事務(wù)Ti申請數(shù)據(jù)對象A上的一個(gè)‘S鎖’xli(A):事務(wù)Ti申請數(shù)據(jù)對象A上的一個(gè)‘X鎖’也可以用li(A)表示事務(wù)Ti申請數(shù)據(jù)對象A上的鎖ui(A):事務(wù)Ti釋放自己在數(shù)據(jù)對象A上所持有的鎖8810.2.4兩階段封鎖協(xié)議基于前述的‘三級封鎖協(xié)議’和‘封鎖的使用規(guī)定在每一個(gè)事務(wù)Ti中第1點(diǎn):采用如下的封鎖協(xié)議:讀動(dòng)作ri(A)之前必須有sli(A)或xli(A),而且在兩者之間沒有ui(A)寫動(dòng)作wi(A)之前必須有xli(A),而且在兩者之間沒有ui(A)每一個(gè)sli(A)或xli(A)之后必須有一個(gè)ui(A)第2點(diǎn):必須遵循‘兩階段封鎖協(xié)議’在任何sli(A)或xli(A)之前不能有ui(B)A和B可以是同一個(gè)數(shù)據(jù)對象89封鎖的使用規(guī)定在每一個(gè)事務(wù)Ti中89封鎖的使用規(guī)定(續(xù))如果事務(wù)Ti在執(zhí)行過程中重復(fù)申請同一個(gè)數(shù)據(jù)對象A上的鎖,‘封鎖管理器’的處理方法如下:如果Ti已經(jīng)持有數(shù)據(jù)對象A上的鎖,則對sli(A)不作任何處理如果Ti已經(jīng)持有數(shù)據(jù)對象A上的‘S鎖’,在處理xli(A)請求時(shí),僅僅將Ti所持有的‘S鎖’改為‘X鎖’僅當(dāng)只有事務(wù)Ti持有數(shù)據(jù)對象A上的‘S鎖’時(shí),封鎖管理器才能將Ti所持有的‘S鎖’改為‘X鎖’如果Ti已經(jīng)持有數(shù)據(jù)對象A上的‘X鎖’,則對xli(A)不作任何處理90封鎖的使用規(guī)定(續(xù))如果事務(wù)Ti在執(zhí)行過程中重復(fù)申請同一個(gè)數(shù)封鎖的使用規(guī)定(續(xù))上述的處理過程確保一個(gè)事務(wù)在一個(gè)數(shù)據(jù)對象上只能持有一把‘鎖’如果事務(wù)Ti在執(zhí)行過程中在同一個(gè)數(shù)據(jù)對象A上執(zhí)行了若干次鎖申請操作:li1(A);li2(A);…;lin(A),并且在li1(A)和lin(A)之間沒有ui(A),則在lin(A)之后必須有且僅有一個(gè)ui(A)封鎖的重復(fù)申請過程只能是:sli(A);……;xli(A);91封鎖的使用規(guī)定(續(xù))上述的處理過程確保91封鎖的使用規(guī)定(續(xù))第3點(diǎn):保證事務(wù)調(diào)度的合法性對于任意兩個(gè)不同的事務(wù)Ti和Tj,其調(diào)度必須滿足:如果xli(A)出現(xiàn)在調(diào)度中,那么后面不能再有slj(A)或xlj(A),除非中間插入了ui(A)如果sli(A)出現(xiàn)在調(diào)度中,那么后面不能再有xlj(A),除非中間插入了ui(A)如果一個(gè)調(diào)度以及它的每個(gè)事務(wù)都滿足上述三個(gè)方面的要求,我們稱該調(diào)度是一個(gè)‘合法調(diào)度’。我們可以將前述的‘調(diào)度器’和‘封鎖管理器’合并為一個(gè)‘封鎖調(diào)度器’,DBMS正是通過‘封鎖調(diào)度器’來產(chǎn)生若干個(gè)并發(fā)運(yùn)行事務(wù)之間的一個(gè)‘合法調(diào)度’的。92封鎖的使用規(guī)定(續(xù))第3點(diǎn):保證事務(wù)調(diào)度的合法性如果一個(gè)調(diào)度封鎖的使用規(guī)定(續(xù))T1T2xyTempAB1Read(A,x)20000-20000200002x:=x-10000100003Read(A,y)200004Temp:=y*0.120005y:=y-Temp180006Write(A,y)180007Read(B,y)200008Write(A,x)100009Read(B,x)2000010x:=x+100003000011Write(B,x)3000012y:=y+Temp2200013Write(B,y)22000圖10.5不正確的并發(fā)執(zhí)行(結(jié)果:A=10000,B=22000)93封鎖的使用規(guī)定(續(xù))T1T2xyTempAB1Read(A,封鎖的使用規(guī)定(續(xù))圖10.5所示的兩個(gè)轉(zhuǎn)帳事務(wù)T1和T2的執(zhí)行流程如下(只保留了對于數(shù)據(jù)庫的訪問操作):r1(A);r2(A);

w2(A);r2(B);w1(A);r1(B);w1(B);w2(B);該操作執(zhí)行流程被發(fā)送給‘封鎖調(diào)度器’時(shí),‘封鎖調(diào)度器’將首先根據(jù)前面介紹的‘封鎖協(xié)議’和‘2PL事務(wù)’的要求插入相應(yīng)的封鎖申請和釋放操作,其流程如下:xl1(A);r1(A);xl2(A);r2(A);w2(A);xl2(B);r2(B);w1(A);xl1(B);r1(B);w1(B);u1(A);u1(B);w2(B);u2(A);u2(B);94封鎖的使用規(guī)定(續(xù))圖10.5所示的兩個(gè)轉(zhuǎn)帳事務(wù)T1和封鎖的使用規(guī)定(續(xù))xl1(A);r1(A);

xl2(A);r2(A);w2(A);xl2(B);r2(B);

w1(A);xl1(B);r1(B);w1(B);u1(A);u1(B);

w2(B);u2(A);u2(B);在上述(預(yù)想)執(zhí)行流程中,‘封鎖調(diào)度器’在處理事務(wù)T2的xl2(A)請求時(shí),因封鎖申請得不到滿足而將事務(wù)T2的操作請求推遲,真正的操作執(zhí)行流程是(這里的xl(A)是申請并獲得A上的‘X鎖’的時(shí)間)xl1(A);r1(A);w1(A);xl1(B);r1(B);w1(B);u1(A);u1(B);xl2(A);r2(A);w2(A);xl2(B);r2(B);w2(B);u2(A);u2(B);最終產(chǎn)生的是T1和T2之間的一個(gè)串行調(diào)度95封鎖的使用規(guī)定(續(xù))xl1(A);r1(A);xl2(A10.2.4兩階段封鎖協(xié)議定理:由2PL事務(wù)所構(gòu)成的任意合法調(diào)度S是沖突可串行化的。證明:當(dāng)調(diào)度S僅由一個(gè)事務(wù)組成時(shí),調(diào)度S是沖突可串行化的。假設(shè):由(n-1)個(gè)2PL事務(wù)所構(gòu)成的任意一個(gè)合法調(diào)度都是沖突可串行化的。設(shè)調(diào)度S涉及n個(gè)2PL事務(wù):T1,T2,……,Tn,并且Ti是調(diào)度S中第一個(gè)有解鎖動(dòng)作的事務(wù),則我們可以得到以下結(jié)論:可以將Ti的所有動(dòng)作不經(jīng)過任何沖突而移動(dòng)到調(diào)度S的最前面。9610.2.4兩階段封鎖協(xié)議定理:由2PL事務(wù)所構(gòu)成的任意定理證明(續(xù))設(shè)在Ti中有一個(gè)動(dòng)作wi(A)(或ri(A)),如果調(diào)度S在該動(dòng)作的前面有一個(gè)與之沖突的動(dòng)作wj(A)(ij),那么調(diào)度S的情況必是:…;wj(A);…;uj(A);…;li(A);…;wi(A);…∵Ti是調(diào)度S中第一個(gè)有解鎖動(dòng)作的事務(wù)∴在uj(A)之前必存在Ti中的一個(gè)解鎖動(dòng)作(如ui(B)),則調(diào)度S變?yōu)椋骸?wj(A);…;ui(B);…;uj(A);…;li(A);…;wi(A);…在上述的調(diào)度S中,僅考慮與事務(wù)Ti有關(guān)的動(dòng)作序列:…;ui(B);…;li(A);…;wi(A);…這不符合2PL事務(wù)的定義,與Ti是2PL事務(wù)相矛盾?!嘣赥i的每個(gè)動(dòng)作wi(A)(或ri(A))之前,都不存在與其產(chǎn)生沖突且屬于其它事務(wù)的動(dòng)作∴結(jié)論成立97定理證明(續(xù))設(shè)在Ti中有一個(gè)動(dòng)作wi(A)(或ri(A))定理證明(續(xù))根據(jù)得到的結(jié)論,我們可以將調(diào)度S轉(zhuǎn)換為另一個(gè)沖突等價(jià)的調(diào)度S’:(Ti的所有動(dòng)作)(其它(n-1)個(gè)2PL事務(wù)的動(dòng)作)并且維持其后半部分動(dòng)作在調(diào)度S中的原有順序不變;其中Ti的封鎖/解鎖動(dòng)作在轉(zhuǎn)換后可以恢復(fù)到調(diào)度S’中去?!哒{(diào)度S是一個(gè)合法調(diào)度∴調(diào)度S’的后半部分是其它(n-1)個(gè)2PL事務(wù)的一個(gè)合法調(diào)度∴根據(jù)步驟2的歸納假設(shè)的前提可得:調(diào)度S’的后半部分是其它(n-1)個(gè)2PL事務(wù)的一個(gè)‘沖突可串行化’的調(diào)度,即沖突等價(jià)于這(n-1)個(gè)2PL事務(wù)的某個(gè)串行調(diào)度?!嗾{(diào)度S’沖突等價(jià)于這n個(gè)2PL事務(wù)的某個(gè)串行調(diào)度∴調(diào)度S’是沖突可串行化的∴調(diào)度S也是沖突可串行化的 證畢98定理證明(續(xù))根據(jù)得到的結(jié)論,我們可以將調(diào)度S轉(zhuǎn)換為另一‘封鎖調(diào)度器’的實(shí)現(xiàn)用于構(gòu)造‘兩階段封鎖事務(wù)’并實(shí)現(xiàn)它們的合法調(diào)度的‘封鎖調(diào)度器’的結(jié)構(gòu)如下圖所示。99‘封鎖調(diào)度器’的實(shí)現(xiàn)用于構(gòu)造‘兩階段封鎖事務(wù)’并實(shí)現(xiàn)它們的合‘封鎖調(diào)度器’的執(zhí)行流程PartⅠ:接受事務(wù)產(chǎn)生的操作請求,并決定是否需要為該請求申請適當(dāng)?shù)姆怄i。在操作請求命令前插入適當(dāng)?shù)逆i申請動(dòng)作(Lock)PartⅡ:接受PartⅠ傳來的封鎖或數(shù)據(jù)庫訪問動(dòng)作請求。如果動(dòng)作是數(shù)據(jù)庫訪問操作,則該動(dòng)作將被傳送到數(shù)據(jù)庫中執(zhí)行;如果動(dòng)作是一個(gè)封鎖動(dòng)作,它將查看‘鎖表’以決定鎖是否能被授予。如果是,則修改‘鎖表’,并將剛剛授予的鎖包括進(jìn)去;如果不是,那么‘鎖表’中必須加入一項(xiàng)以表明該鎖已經(jīng)被申請。在這以后,PartⅡ?qū)⑼七t事務(wù)T(發(fā)出該訪問請求的事務(wù))的進(jìn)一步動(dòng)作,直到鎖申請得到滿足的時(shí)候。100‘封鎖調(diào)度器’的執(zhí)行流程PartⅠ:接受事務(wù)產(chǎn)生的操作請求,‘封鎖調(diào)度器’的執(zhí)行流程(續(xù))當(dāng)事務(wù)T結(jié)束時(shí),‘事務(wù)管理器’將通知PartⅠ,于是PartⅠ釋放事務(wù)T持有的所有封鎖。如果有事務(wù)正在等待這些鎖中的任何一個(gè),則PartⅠ將通知PartⅡ。當(dāng)PartⅡ被告知某個(gè)數(shù)據(jù)庫元素A上的鎖可以獲得時(shí),它決定接下來能獲得A上的鎖的一個(gè)或多個(gè)事務(wù)。PartⅡ?qū)⒔又鴪?zhí)行這些事務(wù)被推遲的請求。在上述這種執(zhí)行情況下,每個(gè)事務(wù)都滿足2PL要求。101‘封鎖調(diào)度器’的執(zhí)行流程(續(xù))當(dāng)事務(wù)T結(jié)束時(shí),‘事務(wù)管理器’10.2并發(fā)控制技術(shù)10.2.1事務(wù)的并發(fā)執(zhí)行10.2.2封鎖10.2.3封鎖協(xié)議10.2.4兩階段封鎖協(xié)議10.2.5封鎖粒度10.2.6活鎖與死鎖10210.2并發(fā)控制技術(shù)10210.2.5封鎖粒度主要內(nèi)容封鎖粒度封鎖粒度、系統(tǒng)并發(fā)度、并發(fā)控制的開銷三者之間的關(guān)系多粒度封鎖意向鎖10310.2.5封鎖粒度主要內(nèi)容10310.2.5封鎖粒度封鎖粒度(Granularity)一把鎖可以封鎖的數(shù)據(jù)對象的大小鎖的封鎖對象可以是數(shù)據(jù)庫中的邏輯數(shù)據(jù)單元,也可以是物理數(shù)據(jù)單元。以關(guān)系數(shù)據(jù)庫系統(tǒng)為例,可以采用的封鎖粒度有:邏輯數(shù)據(jù)單元屬性值(集合),元組,關(guān)系索引項(xiàng),索引文件整個(gè)數(shù)據(jù)庫物理數(shù)據(jù)單元頁,塊10410.2.5封鎖粒度封鎖粒度(Granularity)110.2.5封鎖粒度‘封鎖粒度’與‘系統(tǒng)并發(fā)度’的關(guān)系‘封鎖粒度’與‘并發(fā)控制的開銷’的關(guān)系封鎖粒度系統(tǒng)并發(fā)度并發(fā)控制的開銷大低小小高大10510.2.5封鎖粒度‘封鎖粒度’與‘系統(tǒng)并發(fā)度’的10.2.5封鎖粒度多粒度封鎖(MultipleGranularityLocking)如果在一個(gè)系統(tǒng)中同時(shí)支持多種封鎖粒度供事務(wù)選擇使用,這種封鎖方法被稱為‘多粒度封鎖’通過選擇合適的‘封鎖粒度’來

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論