第七章數(shù)據(jù)庫事務(wù)管理(1)_第1頁
第七章數(shù)據(jù)庫事務(wù)管理(1)_第2頁
第七章數(shù)據(jù)庫事務(wù)管理(1)_第3頁
第七章數(shù)據(jù)庫事務(wù)管理(1)_第4頁
第七章數(shù)據(jù)庫事務(wù)管理(1)_第5頁
已閱讀5頁,還剩42頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第七章第七章 數(shù)據(jù)庫事務(wù)管理數(shù)據(jù)庫事務(wù)管理z7.1 事務(wù)與事務(wù)管理事務(wù)與事務(wù)管理 7.1.1 事務(wù)概念與性質(zhì)事務(wù)概念與性質(zhì) 7.1.2 事務(wù)操作與狀態(tài)事務(wù)操作與狀態(tài) 7.1.3 SQL事務(wù)機(jī)制事務(wù)機(jī)制z7.2 并發(fā)控制技術(shù)并發(fā)控制技術(shù)z7.3 數(shù)據(jù)庫故障恢復(fù)數(shù)據(jù)庫故障恢復(fù)Thinkingz 選修表的外部鍵選修表的外部鍵學(xué)號(hào)學(xué)號(hào)引用了學(xué)生表的主鍵,參照動(dòng)作引用了學(xué)生表的主鍵,參照動(dòng)作為為RESTRICT。z 則以下語句最終刪除了幾條記錄?則以下語句最終刪除了幾條記錄?學(xué)生學(xué)生學(xué)學(xué) 號(hào)號(hào)姓姓 名名性別性別年級年級201204王小明王小明男男2012201206張艷張艷女女2012201208黃大鵬

2、黃大鵬男男2012201312劉芳劉芳女女2013201326李蘭秋李蘭秋女女2013選修選修學(xué)學(xué) 號(hào)號(hào)課程號(hào)課程號(hào)成績成績201208 H3035 NULLDelete From 學(xué)生學(xué)生 Where 年級年級=2012事務(wù)概念事務(wù)概念z事務(wù)定義事務(wù)定義v事務(wù)是事務(wù)是DBMS的基本執(zhí)行單位,的基本執(zhí)行單位,由一序列的數(shù)由一序列的數(shù)據(jù)庫訪問和修改操作組成。這些操作要么全做,據(jù)庫訪問和修改操作組成。這些操作要么全做,要么全不做,是一個(gè)不可分割的整體。要么全不做,是一個(gè)不可分割的整體。 w例如銀行轉(zhuǎn)帳事務(wù)由兩個(gè)操作組成:例如銀行轉(zhuǎn)帳事務(wù)由兩個(gè)操作組成: 轉(zhuǎn)出帳戶轉(zhuǎn)出帳戶A 減去某一金額(減去某一金

3、額(A=A?) 轉(zhuǎn)入帳戶轉(zhuǎn)入帳戶B 增加相同金額(增加相同金額(B=B + ?) 這兩個(gè)操作放在同一個(gè)事務(wù)里完成,要么全做,這兩個(gè)操作放在同一個(gè)事務(wù)里完成,要么全做,要么全不做。要么全不做。事務(wù)的事務(wù)的ACID性質(zhì)性質(zhì)z原子性原子性 (Atomicity)v事務(wù)中包含的所有操作事務(wù)中包含的所有操作(特指修改操作特指修改操作)要么全部做,要要么全部做,要么全不做。么全不做。w例如某個(gè)轉(zhuǎn)帳事務(wù):對帳戶例如某個(gè)轉(zhuǎn)帳事務(wù):對帳戶A扣除扣除100,對帳戶,對帳戶B增增加加100。這兩個(gè)操作要么全做,要么全不做。這兩個(gè)操作要么全做,要么全不做v原子性由原子性由恢復(fù)機(jī)制恢復(fù)機(jī)制(7.3)實(shí)現(xiàn)實(shí)現(xiàn)事務(wù)的事務(wù)的

4、ACID性質(zhì)性質(zhì)z一致性一致性(Consistency)v單獨(dú)執(zhí)行一個(gè)事務(wù)(無其它事務(wù)同時(shí)并發(fā)執(zhí)行)的結(jié)單獨(dú)執(zhí)行一個(gè)事務(wù)(無其它事務(wù)同時(shí)并發(fā)執(zhí)行)的結(jié)果必須保證數(shù)據(jù)一致性。即事務(wù)開始前,數(shù)據(jù)滿足一果必須保證數(shù)據(jù)一致性。即事務(wù)開始前,數(shù)據(jù)滿足一致性要求;事務(wù)結(jié)束后,數(shù)據(jù)雖然可能被修改了,但致性要求;事務(wù)結(jié)束后,數(shù)據(jù)雖然可能被修改了,但仍然滿足一致性的要求。仍然滿足一致性的要求。w這里數(shù)據(jù)一致性要求,根據(jù)具體應(yīng)用而定。這里數(shù)據(jù)一致性要求,根據(jù)具體應(yīng)用而定。例如在銀行系統(tǒng)中,轉(zhuǎn)帳事務(wù)的一致性要求是前后例如在銀行系統(tǒng)中,轉(zhuǎn)帳事務(wù)的一致性要求是前后兩個(gè)帳戶的金額總和不變。假如一個(gè)事務(wù)為帳戶兩個(gè)帳戶的金額

5、總和不變。假如一個(gè)事務(wù)為帳戶A減減去去100,為帳戶,為帳戶B加上加上50,那么這個(gè)事務(wù)就違反了一,那么這個(gè)事務(wù)就違反了一致性。致性。事務(wù)的事務(wù)的ACID性質(zhì)性質(zhì)v保證單個(gè)事務(wù)的一致性,由編寫事務(wù)的應(yīng)用程序員來保證單個(gè)事務(wù)的一致性,由編寫事務(wù)的應(yīng)用程序員來負(fù)責(zé),并借助負(fù)責(zé),并借助完整性機(jī)制完整性機(jī)制(6.3)來協(xié)助實(shí)現(xiàn)。來協(xié)助實(shí)現(xiàn)。w也就是說,如果有數(shù)據(jù)一致性要求(例如轉(zhuǎn)賬前后總和也就是說,如果有數(shù)據(jù)一致性要求(例如轉(zhuǎn)賬前后總和不變)不變) ,可以將其定義成某些完整性規(guī)則。,可以將其定義成某些完整性規(guī)則。事務(wù)的事務(wù)的ACID性質(zhì)性質(zhì)z隔離性隔離性 (Isolation)v多個(gè)事務(wù)在并發(fā)執(zhí)行時(shí)不

6、會(huì)相互影響,好像它們是隔離開來多個(gè)事務(wù)在并發(fā)執(zhí)行時(shí)不會(huì)相互影響,好像它們是隔離開來的一樣。最后的效果,與按某個(gè)順序依次執(zhí)行這些事務(wù)是一的一樣。最后的效果,與按某個(gè)順序依次執(zhí)行這些事務(wù)是一樣的。樣的。v隔離性要求一個(gè)事務(wù),隔離性要求一個(gè)事務(wù),不會(huì)看到另一事務(wù)的中間結(jié)果不會(huì)看到另一事務(wù)的中間結(jié)果。w例如一個(gè)事務(wù)例如一個(gè)事務(wù)T1讀取的數(shù)據(jù),讀取的數(shù)據(jù),一部分是一部分是事務(wù)事務(wù)T2修改前修改前的數(shù)據(jù),的數(shù)據(jù),一部分是一部分是事務(wù)事務(wù)T2修改后修改后的數(shù)據(jù),這就違反了隔離性,并可能的數(shù)據(jù),這就違反了隔離性,并可能導(dǎo)致數(shù)據(jù)錯(cuò)誤。導(dǎo)致數(shù)據(jù)錯(cuò)誤。w兩個(gè)數(shù)據(jù)兩個(gè)數(shù)據(jù) A=a1, B=b1 事務(wù)事務(wù)T2發(fā)生發(fā)生

7、A=a2, B=b2事務(wù)事務(wù)T1讀讀 A=a1, B=b1 正確正確 A=a2, B=b2 正確正確 A=a2, B=b1 錯(cuò)誤錯(cuò)誤 A=a1, B=b2 錯(cuò)誤錯(cuò)誤v隔離性通過隔離性通過并發(fā)控制機(jī)制并發(fā)控制機(jī)制(7.2)實(shí)現(xiàn)實(shí)現(xiàn)事務(wù)的事務(wù)的ACID性質(zhì)性質(zhì)z持久性持久性(Durability)v事務(wù)一旦提交,它對數(shù)據(jù)庫的影響就是永久性的。無事務(wù)一旦提交,它對數(shù)據(jù)庫的影響就是永久性的。無論發(fā)生什么事情,都不能取消這種影響。論發(fā)生什么事情,都不能取消這種影響。v例如一個(gè)事務(wù)將例如一個(gè)事務(wù)將50元從帳戶元從帳戶A轉(zhuǎn)到帳戶轉(zhuǎn)到帳戶B,此事務(wù)一旦,此事務(wù)一旦提交,這種交易是無法悔改的提交,這種交易是無法

8、悔改的即便發(fā)生故障,也即便發(fā)生故障,也不能把這不能把這50元元“還還”回去?;厝?。v持久性通過持久性通過恢復(fù)機(jī)制恢復(fù)機(jī)制(7.3)實(shí)現(xiàn)實(shí)現(xiàn)事務(wù)狀態(tài)與操作事務(wù)狀態(tài)與操作失敗狀態(tài)失敗狀態(tài)部分部分提交狀態(tài)提交狀態(tài)中止?fàn)顟B(tài)中止?fàn)顟B(tài)活動(dòng)狀態(tài)活動(dòng)狀態(tài)執(zhí)行執(zhí)行執(zhí)行全部執(zhí)行全部語句成功語句成功提交提交提交完畢提交完畢回滾回滾回滾完畢回滾完畢執(zhí)行某個(gè)執(zhí)行某個(gè)語句失敗語句失敗永久化信息永久化信息寫入失敗寫入失敗事務(wù)事務(wù)開始開始提交狀態(tài)提交狀態(tài)逐個(gè)語句逐個(gè)語句永久化每個(gè)修改(寫入到日志)永久化每個(gè)修改(寫入到日志)把數(shù)據(jù)改回舊值把數(shù)據(jù)改回舊值事務(wù)結(jié)束狀態(tài)之二事務(wù)結(jié)束狀態(tài)之二事務(wù)結(jié)束狀態(tài)之一事務(wù)結(jié)束狀態(tài)之一事務(wù)狀態(tài)與

9、操作事務(wù)狀態(tài)與操作z 活動(dòng)狀態(tài)活動(dòng)狀態(tài)v 事務(wù)開始后進(jìn)入事務(wù)開始后進(jìn)入v 事務(wù)處于本狀態(tài)時(shí),依次執(zhí)行事務(wù)中的每條語句事務(wù)處于本狀態(tài)時(shí),依次執(zhí)行事務(wù)中的每條語句z 部分提交狀態(tài)部分提交狀態(tài)(教材:局部提交狀態(tài)教材:局部提交狀態(tài))v 執(zhí)行完事務(wù)的全部語句后進(jìn)入執(zhí)行完事務(wù)的全部語句后進(jìn)入v 事務(wù)處于本狀態(tài)時(shí),將已做的每個(gè)修改操作提交,即永久化寫入事務(wù)處于本狀態(tài)時(shí),將已做的每個(gè)修改操作提交,即永久化寫入到日志中。這樣即使修改操作后來丟失了(例如數(shù)據(jù)庫崩潰),到日志中。這樣即使修改操作后來丟失了(例如數(shù)據(jù)庫崩潰),也能根據(jù)日志來恢復(fù)它也能根據(jù)日志來恢復(fù)它z 提交狀態(tài)提交狀態(tài)v提交完全部修改操作后進(jìn)入提交

10、完全部修改操作后進(jìn)入v事務(wù)處于本狀態(tài)時(shí),事務(wù)結(jié)束。為事務(wù)的結(jié)束狀態(tài)之一事務(wù)處于本狀態(tài)時(shí),事務(wù)結(jié)束。為事務(wù)的結(jié)束狀態(tài)之一事務(wù)狀態(tài)與操作事務(wù)狀態(tài)與操作z 失敗狀態(tài)失敗狀態(tài)v 在活動(dòng)狀態(tài)中,執(zhí)行某條語句失敗時(shí)進(jìn)入;或者在部分提交狀態(tài)在活動(dòng)狀態(tài)中,執(zhí)行某條語句失敗時(shí)進(jìn)入;或者在部分提交狀態(tài)中,提交永久化信息失敗時(shí)進(jìn)入中,提交永久化信息失敗時(shí)進(jìn)入v 事務(wù)處于本狀態(tài)時(shí),不斷回滾已經(jīng)發(fā)生的修改操作,即把數(shù)據(jù)改事務(wù)處于本狀態(tài)時(shí),不斷回滾已經(jīng)發(fā)生的修改操作,即把數(shù)據(jù)改成原來的舊值。成原來的舊值。z 中止?fàn)顟B(tài)中止?fàn)顟B(tài)v回滾全部修改操作后進(jìn)入回滾全部修改操作后進(jìn)入v事務(wù)處于本狀態(tài)時(shí),事務(wù)結(jié)束。為事務(wù)的結(jié)束狀態(tài)之二事

11、務(wù)處于本狀態(tài)時(shí),事務(wù)結(jié)束。為事務(wù)的結(jié)束狀態(tài)之二Thinkingz執(zhí)行一個(gè)事務(wù)時(shí),可能經(jīng)過哪些狀態(tài)序列執(zhí)行一個(gè)事務(wù)時(shí),可能經(jīng)過哪些狀態(tài)序列v活動(dòng)狀態(tài)活動(dòng)狀態(tài) 部分提交狀態(tài)部分提交狀態(tài) 提交狀態(tài)提交狀態(tài)v活動(dòng)狀態(tài)活動(dòng)狀態(tài) 失敗狀態(tài)失敗狀態(tài) 中止?fàn)顟B(tài)中止?fàn)顟B(tài)v活動(dòng)狀態(tài)活動(dòng)狀態(tài) 部分提交狀態(tài)部分提交狀態(tài) 失敗狀態(tài)失敗狀態(tài) 中止?fàn)顟B(tài)中止?fàn)顟B(tài)SQL中的事務(wù)中的事務(wù)z相關(guān)語句相關(guān)語句vBegin Transaction w開始事務(wù)開始事務(wù)vCommit (Transaction) w提交事務(wù)。此時(shí)事務(wù)正常結(jié)束,事務(wù)所做的修改操作都提交事務(wù)。此時(shí)事務(wù)正常結(jié)束,事務(wù)所做的修改操作都有效且有效且永久地永久地寫入數(shù)

12、據(jù)庫寫入數(shù)據(jù)庫vRollback (Transaction) w回滾事務(wù)。此時(shí)事務(wù)非正常結(jié)束,事務(wù)所做的修改操作回滾事務(wù)。此時(shí)事務(wù)非正常結(jié)束,事務(wù)所做的修改操作都無效且必須都無效且必須撤銷撤銷(Undo,數(shù)據(jù)改回舊值,數(shù)據(jù)改回舊值)。w回滾后,數(shù)據(jù)庫回退到事務(wù)開始前的狀態(tài),就好像事務(wù)回滾后,數(shù)據(jù)庫回退到事務(wù)開始前的狀態(tài),就好像事務(wù)從來沒有發(fā)生過一樣。從來沒有發(fā)生過一樣。SQL中的事務(wù)中的事務(wù)z兩種說明方式兩種說明方式v事務(wù)的顯式方式事務(wù)的顯式方式w用戶明確說明一個(gè)事務(wù)的開始(用戶明確說明一個(gè)事務(wù)的開始(Begin Transaction語句)語句)和結(jié)束(用和結(jié)束(用Commit/Rollba

13、ck語句)。語句)。v事務(wù)的隱式方式事務(wù)的隱式方式w不需明確說明一個(gè)事務(wù)的開始(有時(shí)也不說明結(jié)束)不需明確說明一個(gè)事務(wù)的開始(有時(shí)也不說明結(jié)束)比如從第一個(gè)有效的比如從第一個(gè)有效的DML語句開始事務(wù)。語句開始事務(wù)。遇到明確的遇到明確的Commit/Rollback結(jié)束一個(gè)事務(wù)。結(jié)束一個(gè)事務(wù)。遇到遇到Create Table、Drop Table、Create View,Create Index等等DDL語句,語句, (提交上一個(gè)事務(wù)后)啟動(dòng)一個(gè)新的(提交上一個(gè)事務(wù)后)啟動(dòng)一個(gè)新的事務(wù)。事務(wù)。SQL中的事務(wù)中的事務(wù)z注意注意v事務(wù)沒有執(zhí)行完事務(wù)沒有執(zhí)行完Commit之前,因某種原因(故障)而之前

14、,因某種原因(故障)而終止了,那么系統(tǒng)就會(huì)自動(dòng)地回滾這個(gè)事務(wù)。終止了,那么系統(tǒng)就會(huì)自動(dòng)地回滾這個(gè)事務(wù)。v判斷判斷SQL語句屬于哪個(gè)事務(wù)語句屬于哪個(gè)事務(wù)( SQL SERVER中,默認(rèn)顯式事務(wù)下中,默認(rèn)顯式事務(wù)下)w如果如果SQL語句處于某個(gè)事務(wù)的語句處于某個(gè)事務(wù)的Begin transaction和和Commit/Rollback之間,那么它就屬于這個(gè)事務(wù)。之間,那么它就屬于這個(gè)事務(wù)。w如果以上不成立,那么這個(gè)如果以上不成立,那么這個(gè)SQL語句本身構(gòu)成一個(gè)獨(dú)立語句本身構(gòu)成一個(gè)獨(dú)立的事務(wù)。的事務(wù)。Thinkingz下面的下面的SQL Server程序包含幾個(gè)事務(wù)程序包含幾個(gè)事務(wù)? z思考,如果執(zhí)

15、行完第一個(gè)思考,如果執(zhí)行完第一個(gè)update語句之后、沒有語句之后、沒有執(zhí)行第二個(gè)執(zhí)行第二個(gè)update語句之前,系統(tǒng)斷電。那么在語句之前,系統(tǒng)斷電。那么在重啟以后,兩個(gè)帳戶的金額會(huì)發(fā)生什么樣的變化重啟以后,兩個(gè)帳戶的金額會(huì)發(fā)生什么樣的變化?Begin Transaction Update account set money= money 50 where no=AUpdate account set money= money 50 where no=BCommitThinkingz下面的下面的SQL Server程序包含幾個(gè)事務(wù)程序包含幾個(gè)事務(wù)? z思考,如果執(zhí)行完第一個(gè)思考,如果執(zhí)行完第一

16、個(gè)update語句之后、沒有語句之后、沒有執(zhí)行第二個(gè)執(zhí)行第二個(gè)update語句之前,系統(tǒng)斷電。那么在語句之前,系統(tǒng)斷電。那么在重啟以后,兩個(gè)帳戶的金額會(huì)發(fā)生什么樣的變化重啟以后,兩個(gè)帳戶的金額會(huì)發(fā)生什么樣的變化?Update account set money= money 50 where no=AUpdate account set money= money 50 where no=BThinkingz 選修表的外部鍵選修表的外部鍵學(xué)號(hào)學(xué)號(hào)引用了學(xué)生表的主鍵,參照動(dòng)作引用了學(xué)生表的主鍵,參照動(dòng)作為為RESTRICT。z 則以下語句最終刪除了幾條記錄?則以下語句最終刪除了幾條記錄?學(xué)生學(xué)生學(xué)

17、學(xué) 號(hào)號(hào)姓姓 名名性別性別年級年級201204王小明王小明男男2012201206張艷張艷女女2012201208黃大鵬黃大鵬男男2012201312劉芳劉芳女女2013201326李蘭秋李蘭秋女女2013選修選修學(xué)學(xué) 號(hào)號(hào)課程號(hào)課程號(hào)成績成績201208 H3035 NULLDelete From 學(xué)生學(xué)生 Where 年級年級=2012目錄目錄z7.1 事務(wù)與事務(wù)管理事務(wù)與事務(wù)管理z7.2 并發(fā)控制技術(shù)并發(fā)控制技術(shù) 7.2.1 事務(wù)并發(fā)執(zhí)行事務(wù)并發(fā)執(zhí)行 7.2.2 并發(fā)引起不一致問題并發(fā)引起不一致問題 7.2.3 并發(fā)執(zhí)行正確性準(zhǔn)則概述并發(fā)執(zhí)行正確性準(zhǔn)則概述 7.2.4 并發(fā)控制基本技術(shù)并

18、發(fā)控制基本技術(shù) 7.2.5 封鎖協(xié)議封鎖協(xié)議 7.2.6 活鎖與死鎖活鎖與死鎖 7.2.7 多粒度封鎖多粒度封鎖z7.3 數(shù)據(jù)庫故障恢復(fù)數(shù)據(jù)庫故障恢復(fù)兩種事務(wù)調(diào)度兩種事務(wù)調(diào)度z事務(wù)調(diào)度事務(wù)調(diào)度v系統(tǒng)以什么時(shí)間順序執(zhí)行系統(tǒng)以什么時(shí)間順序執(zhí)行(進(jìn)入系統(tǒng)的)(進(jìn)入系統(tǒng)的)一組事務(wù)一組事務(wù)/ /事事務(wù)的指令務(wù)的指令w雖然在微觀上,這組事務(wù)是先后到達(dá)系統(tǒng)的,但宏觀上雖然在微觀上,這組事務(wù)是先后到達(dá)系統(tǒng)的,但宏觀上可能是可能是“同時(shí)同時(shí)”到達(dá)系統(tǒng):即上一個(gè)事務(wù)還沒結(jié)束時(shí),到達(dá)系統(tǒng):即上一個(gè)事務(wù)還沒結(jié)束時(shí),下一個(gè)事務(wù)又進(jìn)入了系統(tǒng)。下一個(gè)事務(wù)又進(jìn)入了系統(tǒng)。兩種事務(wù)調(diào)度兩種事務(wù)調(diào)度z串行調(diào)度串行調(diào)度(教材:串行

19、執(zhí)行教材:串行執(zhí)行) v當(dāng)前一個(gè)事務(wù)完全結(jié)束后,下一個(gè)事務(wù)才開始執(zhí)行。當(dāng)前一個(gè)事務(wù)完全結(jié)束后,下一個(gè)事務(wù)才開始執(zhí)行。v特點(diǎn):從時(shí)間順序看,同一事務(wù)的指令緊挨在一起。特點(diǎn):從時(shí)間順序看,同一事務(wù)的指令緊挨在一起。z并發(fā)調(diào)度并發(fā)調(diào)度(教材:并發(fā)執(zhí)行教材:并發(fā)執(zhí)行) v未執(zhí)行完一個(gè)事務(wù),可轉(zhuǎn)去執(zhí)行另一事務(wù)。未執(zhí)行完一個(gè)事務(wù),可轉(zhuǎn)去執(zhí)行另一事務(wù)。w事務(wù)的執(zhí)行時(shí)間重疊,宏觀上多個(gè)事務(wù)同時(shí)執(zhí)行,微觀事務(wù)的執(zhí)行時(shí)間重疊,宏觀上多個(gè)事務(wù)同時(shí)執(zhí)行,微觀上這些事務(wù)交叉或者說分時(shí)執(zhí)行上這些事務(wù)交叉或者說分時(shí)執(zhí)行。v特點(diǎn):從時(shí)間順序看,不同事務(wù)的指令彼此交叉。特點(diǎn):從時(shí)間順序看,不同事務(wù)的指令彼此交叉。并發(fā)調(diào)度的優(yōu)勢

20、并發(fā)調(diào)度的優(yōu)勢z并發(fā)調(diào)度并發(fā)調(diào)度 VS 串行調(diào)度串行調(diào)度v不同事務(wù)的不同指令,涉及的系統(tǒng)資源也不同。同時(shí)不同事務(wù)的不同指令,涉及的系統(tǒng)資源也不同。同時(shí)執(zhí)行這些指令,執(zhí)行這些指令,可以提高可以提高資源利用率資源利用率和和系統(tǒng)吞吐量系統(tǒng)吞吐量w例如,事務(wù)例如,事務(wù)A和事務(wù)和事務(wù)B,都由指令都由指令1(要求要求CPU計(jì)算計(jì)算)和指令和指令2(要求要求I/O)組成。組成。CPU和和I/O設(shè)備是可以并行工作的,所設(shè)備是可以并行工作的,所以并發(fā)執(zhí)行事務(wù)以并發(fā)執(zhí)行事務(wù)A的指令的指令2和事務(wù)和事務(wù)B的指令的指令1時(shí),可以避免時(shí),可以避免資源閑置和縮短總執(zhí)行時(shí)間。資源閑置和縮短總執(zhí)行時(shí)間。并發(fā)調(diào)度的優(yōu)勢并發(fā)調(diào)度

21、的優(yōu)勢v系統(tǒng)中存在著周期不等的各種事務(wù),串行調(diào)度導(dǎo)致短系統(tǒng)中存在著周期不等的各種事務(wù),串行調(diào)度導(dǎo)致短事務(wù)可能要等待長事務(wù)的完成。而采用并發(fā)調(diào)度,靈事務(wù)可能要等待長事務(wù)的完成。而采用并發(fā)調(diào)度,靈活決定事務(wù)的執(zhí)行順序,活決定事務(wù)的執(zhí)行順序,可以減少可以減少平均響應(yīng)時(shí)間平均響應(yīng)時(shí)間w例如,需時(shí)為例如,需時(shí)為10分鐘的事務(wù)分鐘的事務(wù)A開始開始2分鐘后,需時(shí)為分鐘后,需時(shí)為1分分鐘的事務(wù)鐘的事務(wù)B進(jìn)入系統(tǒng)。對于串行調(diào)度,等待事務(wù)進(jìn)入系統(tǒng)。對于串行調(diào)度,等待事務(wù)A完成后完成后才能執(zhí)行事務(wù)才能執(zhí)行事務(wù)B;對于并發(fā)調(diào)度,可以立刻轉(zhuǎn)去執(zhí)行事對于并發(fā)調(diào)度,可以立刻轉(zhuǎn)去執(zhí)行事務(wù)務(wù)B,再回頭執(zhí)行事務(wù),再回頭執(zhí)行事務(wù)A

22、w思考:比較兩者的平均響應(yīng)時(shí)間思考:比較兩者的平均響應(yīng)時(shí)間? 響應(yīng)時(shí)間響應(yīng)時(shí)間事務(wù)進(jìn)入事務(wù)進(jìn)入系統(tǒng)到事務(wù)完成的時(shí)間差事務(wù)等待的時(shí)間系統(tǒng)到事務(wù)完成的時(shí)間差事務(wù)等待的時(shí)間+事務(wù)執(zhí)行的事務(wù)執(zhí)行的時(shí)間時(shí)間事務(wù)調(diào)度例子事務(wù)調(diào)度例子z事務(wù)的表示事務(wù)的表示T:read(A);A := A 50;write(A);read(B);B := B + 50;write(B);vread(X): 把數(shù)據(jù)把數(shù)據(jù)X從從數(shù)據(jù)庫數(shù)據(jù)庫讀出到事務(wù)的讀出到事務(wù)的私有緩沖私有緩沖中中vwrite(X): 把數(shù)據(jù)把數(shù)據(jù)X從事務(wù)的從事務(wù)的私有緩沖私有緩沖中寫回到中寫回到數(shù)據(jù)庫數(shù)據(jù)庫帳戶帳戶A減去減去50帳戶帳戶B加上加上50事務(wù)調(diào)度

23、例子事務(wù)調(diào)度例子z數(shù)據(jù)一致性要求:數(shù)據(jù)一致性要求:A、B總和不變總和不變v思考:事務(wù)思考:事務(wù)T1、T2是否具有一致性是否具有一致性?事務(wù)事務(wù)T1read(A);A := A 100;write(A);read(B);B := B + 100;write(B);從從A轉(zhuǎn)帳轉(zhuǎn)帳100到到B從從A轉(zhuǎn)帳轉(zhuǎn)帳200到到B事務(wù)事務(wù)T2read(A);A := A 200;write(A);read(B);B := B + 200;write(B);開始狀態(tài)開始狀態(tài)A=1000B= 0事務(wù)調(diào)度例子事務(wù)調(diào)度例子z串行調(diào)度串行調(diào)度1v調(diào)度的結(jié)果是否保證調(diào)度的結(jié)果是否保證了數(shù)據(jù)一致性了數(shù)據(jù)一致性? read(A

24、); A := A 100; write(A); read(B); B := B +100; write(B); read(A); A := A 200; write(A); read(B); B := B + 200; write(B);T1T2A=900B=100結(jié)束狀態(tài)結(jié)束狀態(tài)A=700B=300開始狀態(tài)開始狀態(tài)A=1000B= 0開始狀態(tài)開始狀態(tài)A=1000B= 0事務(wù)調(diào)度例子事務(wù)調(diào)度例子z串行調(diào)度串行調(diào)度2v調(diào)度的結(jié)果是否保證調(diào)度的結(jié)果是否保證了數(shù)據(jù)一致性了數(shù)據(jù)一致性?v思考:所有串行調(diào)度都思考:所有串行調(diào)度都能保證數(shù)據(jù)一致性嗎?能保證數(shù)據(jù)一致性嗎? read(A); A := A

25、100; write(A); read(B); B := B +100; write(B); read(A); A := A 200; write(A); read(B); B := B + 200; write(B);T1T2A=800B=200結(jié)束狀態(tài)結(jié)束狀態(tài)A=700B=300事務(wù)調(diào)度例子事務(wù)調(diào)度例子z并發(fā)調(diào)度并發(fā)調(diào)度1v調(diào)度的結(jié)果是否保證調(diào)度的結(jié)果是否保證了數(shù)據(jù)一致性了數(shù)據(jù)一致性?v思考:思考:T1、T2讀寫的是讀寫的是對方修改前對方修改前/后的數(shù)據(jù)?后的數(shù)據(jù)? read(B); B := B +100; write(B); read(A); A := A 200; write(A);

26、 T1T2A=700B= 0結(jié)束狀態(tài)結(jié)束狀態(tài)A=700B=300 read(B); B := B + 200; write(B); read(A); A := A 100; write(A);A=800B= 0A=700B=200事務(wù)調(diào)度例子事務(wù)調(diào)度例子z并發(fā)調(diào)度并發(fā)調(diào)度2v調(diào)度的結(jié)果是否保證調(diào)度的結(jié)果是否保證了數(shù)據(jù)一致性了數(shù)據(jù)一致性?v思考:思考:T1、T2讀寫的是讀寫的是對方修改前對方修改前/后的數(shù)據(jù)?后的數(shù)據(jù)? read(B); B := B +100; write(B); read(A); A := A 200;T1T2A=900B= 0結(jié)束狀態(tài)結(jié)束狀態(tài)A=800B=300 write

27、(A); read(B); B := B + 200; write(B); read(A); A := A 100; write(A);A=1000B= 0A=800B=200小結(jié)小結(jié)z保證保證單個(gè)事務(wù)一致性的情況下,單個(gè)事務(wù)一致性的情況下,v多個(gè)事務(wù)串行調(diào)度時(shí)多個(gè)事務(wù)串行調(diào)度時(shí),不會(huì)破壞數(shù)據(jù)一致性。,不會(huì)破壞數(shù)據(jù)一致性。v多個(gè)事務(wù)并發(fā)調(diào)度時(shí)多個(gè)事務(wù)并發(fā)調(diào)度時(shí),可能會(huì)、也可能不會(huì)破壞,可能會(huì)、也可能不會(huì)破壞數(shù)據(jù)數(shù)據(jù)一致性。一致性。w取決于取決于并發(fā)并發(fā)調(diào)度有否調(diào)度有否違反隔離違反隔離性。性。并發(fā)調(diào)度的問題并發(fā)調(diào)度的問題z并發(fā)調(diào)度并發(fā)調(diào)度的問題:可能破壞數(shù)據(jù)一致性的問題:可能破壞數(shù)據(jù)一致性v即使

28、單個(gè)事務(wù)的執(zhí)行不會(huì)破壞數(shù)據(jù)一致性,多個(gè)這樣即使單個(gè)事務(wù)的執(zhí)行不會(huì)破壞數(shù)據(jù)一致性,多個(gè)這樣的事務(wù)在并發(fā)調(diào)度時(shí),也可能破壞數(shù)據(jù)一致性。的事務(wù)在并發(fā)調(diào)度時(shí),也可能破壞數(shù)據(jù)一致性。z產(chǎn)生問題的原因產(chǎn)生問題的原因: 事務(wù)隔離性未得到保證事務(wù)隔離性未得到保證v隔離性要求事務(wù)隔離性要求事務(wù)T1不能看到另一個(gè)事務(wù)不能看到另一個(gè)事務(wù)T2的中間結(jié)果的中間結(jié)果(一部分?jǐn)?shù)據(jù)是修改前的,一部分?jǐn)?shù)據(jù)是修改后的)(一部分?jǐn)?shù)據(jù)是修改前的,一部分?jǐn)?shù)據(jù)是修改后的)v但在并發(fā)執(zhí)行的情況下,有時(shí)沒有做到這一點(diǎn)但在并發(fā)執(zhí)行的情況下,有時(shí)沒有做到這一點(diǎn)z解決方法(解決方法(正確性準(zhǔn)則正確性準(zhǔn)則): 使使并發(fā)調(diào)度并發(fā)調(diào)度可串行化可串行化v

29、事務(wù)的串行調(diào)度顯然不會(huì)破壞數(shù)據(jù)一致性事務(wù)的串行調(diào)度顯然不會(huì)破壞數(shù)據(jù)一致性v如果事務(wù)的并發(fā)調(diào)度是可串行化的,如果事務(wù)的并發(fā)調(diào)度是可串行化的,即效果上等價(jià)于即效果上等價(jià)于某個(gè)串行調(diào)度時(shí)某個(gè)串行調(diào)度時(shí),也不會(huì)破壞數(shù)據(jù)一致性,也不會(huì)破壞數(shù)據(jù)一致性再小結(jié)再小結(jié)z保證保證單個(gè)事務(wù)一致性的情況下,單個(gè)事務(wù)一致性的情況下,v任何串行調(diào)度,不會(huì)任何串行調(diào)度,不會(huì)破壞數(shù)據(jù)一致性。破壞數(shù)據(jù)一致性。v保證隔離性保證隔離性/可串行化的并發(fā)調(diào)度,也不會(huì)破壞數(shù)據(jù)一可串行化的并發(fā)調(diào)度,也不會(huì)破壞數(shù)據(jù)一致性。致性。v隔離性得不到保證隔離性得不到保證/不可串行化,可能會(huì)破壞數(shù)據(jù)一致不可串行化,可能會(huì)破壞數(shù)據(jù)一致性,產(chǎn)生錯(cuò)誤。性,

30、產(chǎn)生錯(cuò)誤。z接下來的問題接下來的問題v并發(fā)調(diào)度產(chǎn)生的錯(cuò)誤有哪些?并發(fā)調(diào)度產(chǎn)生的錯(cuò)誤有哪些?三類不一致性三類不一致性z我們把并發(fā)調(diào)度我們把并發(fā)調(diào)度破壞數(shù)據(jù)一致性所產(chǎn)生的錯(cuò)誤,破壞數(shù)據(jù)一致性所產(chǎn)生的錯(cuò)誤,又稱為數(shù)據(jù)不一致性。分為以下三種:又稱為數(shù)據(jù)不一致性。分為以下三種:v丟失修改丟失修改v不可重復(fù)讀不可重復(fù)讀v讀讀“臟臟”數(shù)據(jù)數(shù)據(jù)第一類:丟失修改第一類:丟失修改z丟失修改的產(chǎn)生丟失修改的產(chǎn)生v并發(fā)調(diào)度兩個(gè)事務(wù)并發(fā)調(diào)度兩個(gè)事務(wù)T1、T2。vT1與與T2從數(shù)據(jù)庫中讀入同一數(shù)據(jù)后分別修改。假設(shè)從數(shù)據(jù)庫中讀入同一數(shù)據(jù)后分別修改。假設(shè)T1先提交,而先提交,而T2后提交。后提交。v則則T2提交的修改覆蓋了提

31、交的修改覆蓋了T1提交的修改,導(dǎo)致提交的修改,導(dǎo)致T1的修的修改丟失。改丟失。第一類:丟失修改第一類:丟失修改z例子例子v事務(wù)事務(wù)T1: 賣出兩張機(jī)票;事務(wù)賣出兩張機(jī)票;事務(wù)T2:賣出一張機(jī)票:賣出一張機(jī)票事務(wù)事務(wù)T1read(A);A := A 2;write(A);事務(wù)事務(wù)T2read(A);A := A 1;write(A);起始狀態(tài)起始狀態(tài):A=10串行調(diào)度串行調(diào)度T1, T2:A=7; 串行調(diào)度串行調(diào)度T2, T1:A=7第一類:丟失修改第一類:丟失修改v丟失修改的并發(fā)調(diào)度丟失修改的并發(fā)調(diào)度A=8A=9T1和和T2讀入讀入同一數(shù)據(jù)同一數(shù)據(jù)A,T2提交的修提交的修改覆蓋了改覆蓋了T1提

32、交的修改,提交的修改,導(dǎo)致導(dǎo)致T1的修的修改丟失。改丟失。 read(A); A := A 1; write(A); read(A); A := A 2; write(A); T1T2開始開始A=10第二類:不可重復(fù)讀第二類:不可重復(fù)讀z不可重復(fù)讀的產(chǎn)生不可重復(fù)讀的產(chǎn)生v事務(wù)事務(wù)T1讀取某些數(shù)據(jù)(記錄)后,讀取某些數(shù)據(jù)(記錄)后,v事務(wù)事務(wù)T2對這些數(shù)據(jù)(記錄)做了對這些數(shù)據(jù)(記錄)做了某種修改操作某種修改操作v當(dāng)當(dāng)T1再次讀取該數(shù)據(jù)(記錄)時(shí),得到的是與前一次再次讀取該數(shù)據(jù)(記錄)時(shí),得到的是與前一次不同的值不同的值第二類:不可重復(fù)讀第二類:不可重復(fù)讀z不可重復(fù)讀的產(chǎn)生不可重復(fù)讀的產(chǎn)生v事務(wù)

33、事務(wù)T1讀取某些數(shù)據(jù)(記錄)后,讀取某些數(shù)據(jù)(記錄)后,v事務(wù)事務(wù)T2對這些數(shù)據(jù)(記錄)做了對這些數(shù)據(jù)(記錄)做了某種修改操作某種修改操作v當(dāng)當(dāng)T1再次讀取該數(shù)據(jù)(記錄)時(shí),得到的是與前一次再次讀取該數(shù)據(jù)(記錄)時(shí),得到的是與前一次不同的值不同的值第二類:不可重復(fù)讀第二類:不可重復(fù)讀z不可重復(fù)讀又分為三種情況不可重復(fù)讀又分為三種情況在事務(wù)在事務(wù)T1兩次讀取之間,兩次讀取之間,v另一事務(wù)另一事務(wù)T2更新更新了記錄。則當(dāng)了記錄。則當(dāng)T1第二次讀取時(shí),得到第二次讀取時(shí),得到與前一次不同的記錄值與前一次不同的記錄值v另一事務(wù)另一事務(wù)T2刪除刪除了部分記錄。則當(dāng)了部分記錄。則當(dāng)T1第二次讀取時(shí),第二次讀

34、取時(shí),發(fā)現(xiàn)其中的某些記錄神秘地消失了發(fā)現(xiàn)其中的某些記錄神秘地消失了v另一事務(wù)另一事務(wù)T2插入插入了一些記錄。則當(dāng)了一些記錄。則當(dāng)T1第二次按相同條第二次按相同條件讀取時(shí),發(fā)現(xiàn)地神秘地多了一些記錄件讀取時(shí),發(fā)現(xiàn)地神秘地多了一些記錄 (后兩種不可重復(fù)讀有時(shí)也稱為(后兩種不可重復(fù)讀有時(shí)也稱為幻影幻影現(xiàn)象)現(xiàn)象)第二類:不可重復(fù)讀第二類:不可重復(fù)讀z不可重復(fù)讀的例子不可重復(fù)讀的例子v事務(wù)事務(wù)T1: 讀取并打印存款,重復(fù)兩次;事務(wù)讀取并打印存款,重復(fù)兩次;事務(wù)T2:存款:存款100事務(wù)事務(wù)T2read(A);A = A + 100;write(A);事務(wù)事務(wù)T1read(A);print(A);read

35、(A);print(A);起始狀態(tài)起始狀態(tài):A=0¥串行調(diào)度串行調(diào)度T1、T2:A=100;打印打印100100串行調(diào)度串行調(diào)度T1、T2:A=100;打印打印100100第二類:不可重復(fù)讀第二類:不可重復(fù)讀v不可重復(fù)讀的并發(fā)調(diào)度不可重復(fù)讀的并發(fā)調(diào)度打印打印A? read(A); A := A + 100; write(A); T1T2 read(A); print(A); read(A); print(A);打印打印A ?事務(wù)事務(wù)T1讀取某讀取某一數(shù)據(jù)一數(shù)據(jù)A后,后,事務(wù)事務(wù)T2對其進(jìn)對其進(jìn)行了更新操作,行了更新操作,當(dāng)當(dāng)T1再次讀取再次讀取該數(shù)據(jù)時(shí),得該數(shù)據(jù)時(shí),得到與前次不同到與前次不同的

36、值。的值。第二類:不可重復(fù)讀第二類:不可重復(fù)讀z幻影的例子幻影的例子v事務(wù)事務(wù)T1: 查詢男生人數(shù),重復(fù)兩次;事務(wù)查詢男生人數(shù),重復(fù)兩次;事務(wù)T2:插入一:插入一條男生記錄。條男生記錄。事務(wù)事務(wù)T2Insert into 學(xué)生表學(xué)生表 (學(xué)號(hào)學(xué)號(hào), 姓名姓名, 性別性別) Values (S5, 王平王平, 男男)事務(wù)事務(wù)T1Select Count(*)From 學(xué)生表學(xué)生表 Where 性別性別 = 男男Select Count(*) From 學(xué)生表學(xué)生表 Where 性別性別 = 男男串行調(diào)度串行調(diào)度T1、T2:兩次的男生人數(shù)相同兩次的男生人數(shù)相同串行調(diào)度串行調(diào)度T1、T2:兩次的男生人數(shù)相同兩次的男生人數(shù)相同(比左邊多(比左邊多1)第二類:不可重復(fù)讀第二類:不可重復(fù)讀v產(chǎn)生產(chǎn)生“幻影幻影”的并發(fā)調(diào)度的并發(fā)調(diào)度T1T2同一個(gè)事務(wù)中,同一個(gè)事務(wù)中,(條件)相同(條件)相同的兩次查詢,的兩次查詢,結(jié)果卻不同。結(jié)果卻不同。某些記錄神秘某些記錄神秘地出

溫馨提示

  • 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

提交評論