事務(wù)與并發(fā)控制ppt課件_第1頁
事務(wù)與并發(fā)控制ppt課件_第2頁
事務(wù)與并發(fā)控制ppt課件_第3頁
事務(wù)與并發(fā)控制ppt課件_第4頁
事務(wù)與并發(fā)控制ppt課件_第5頁
已閱讀5頁,還剩16頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第7章 事務(wù)與并發(fā)控制7.1 事務(wù)7.2 并發(fā)控制7.1 事務(wù)7.1.1 事務(wù)的特性事務(wù)具有如下特性: 原子性Atomicity,事務(wù)是一個不可分割的整體,它對數(shù)據(jù)庫的操作要么全做,要么全不做,即不允許事務(wù)部分地完成,假設(shè)因缺點而導(dǎo)致事務(wù)未能完成,那么應(yīng)經(jīng)過恢復(fù)功能使數(shù)據(jù)庫回到該事務(wù)執(zhí)行前的形狀。 一致性Consistency,事務(wù)對數(shù)據(jù)庫的作用應(yīng)使數(shù)據(jù)庫從一個一致形狀轉(zhuǎn)換到另一個一致形狀。一致形狀是指數(shù)據(jù)庫中的數(shù)據(jù)滿足完好性約束。 隔離性Isolation,多個事務(wù)并發(fā)執(zhí)行時,應(yīng)互不影響,其結(jié)果要和這些事務(wù)獨立執(zhí)行的結(jié)果一樣。并發(fā)控制就是為了保證事務(wù)間的隔離性。 耐久性Durability,

2、一旦事務(wù)執(zhí)行勝利,那么該事務(wù)對數(shù)據(jù)庫進展的一切更新都是耐久的,即使因數(shù)據(jù)庫缺點而遭到破壞,DBMS也能恢復(fù)。事務(wù)的這些特性簡稱為ACID特性,DBMS普通都能保證事務(wù)的ACID特性。7.1.2 事務(wù)類型與事務(wù)的形狀1事務(wù)類型事務(wù)普通可分為兩類:系統(tǒng)事務(wù)和用戶定義的事務(wù)。系統(tǒng)事務(wù)又稱為隱式事務(wù),指某些特定的SQL語句由系統(tǒng)單獨作為一個事務(wù)處置,包括的主要語句如下: 一切的CREATE語句; 一切的DROP語句; INSERT,UPDATE,DELETE語句。例如,執(zhí)行如下的創(chuàng)建表語句:CREATE TABLE xx f1 int not null, f2 char10, f3 varchar30

3、這條語句本身就構(gòu)成了一個事務(wù),它要么建立含3列的表構(gòu)造,要么對數(shù)據(jù)庫沒有任何影響。在實踐運用中,大量運用的是用戶定義的事務(wù)。用戶事務(wù)的定義方法:用BEGIN TRANSACTION語句指定一個事務(wù)的開場,用COMMIT或ROLLBACK語句闡明一個事務(wù)的終了。留意必需明確指定事務(wù)的終了,否那么系統(tǒng)將把從事務(wù)開場到用戶封鎖銜接之間一切的操作都作為一個事務(wù)來處置。7.1.2 事務(wù)類型與事務(wù)的形狀1開場事務(wù)語法格式:BEGIN TRANSACTION功能:控制事務(wù)的開場。2終了事務(wù) 事務(wù)提交語法格式:COMMIT功能:COMMIT語句用于提交事務(wù),即將事務(wù)對數(shù)據(jù)庫的一切更新寫到物理數(shù)據(jù)庫中,同時,也

4、標(biāo)志一個事務(wù)的終了。 事務(wù)回滾語法格式:ROLLBACK 功能:事務(wù)回滾,即將事務(wù)對數(shù)據(jù)庫已完成的操作全部撤銷,回滾到事務(wù)開場時的形狀,它也標(biāo)志一個事務(wù)的終了,ROLLBACK語句將去除自事務(wù)的起點或到某個保管點所做的一切數(shù)據(jù)修正,并且釋放由事務(wù)控制的資源。以下例子闡明事務(wù)處置語句的運用。7.1.2 事務(wù)類型與事務(wù)的形狀【例【例7.1】 定義一個事務(wù),將定義一個事務(wù),將 “計算機專業(yè)學(xué)生的密碼改為計算機專業(yè)學(xué)生的密碼改為“1234,并提交,并提交該事務(wù)。該事務(wù)。BEGIN TRANSACTIONUSE XSCJUPDATE XS SET 密碼密碼 = 1234 WHERE 專業(yè)專業(yè) = 計算機

5、計算機COMMIT在在SQL Server 2005中,中,ROLLBACK還可以加上選項還可以加上選項 TRANSACTION |,保管點名或保管點變量名可用,保管點名或保管點變量名可用SAVE TRANSACTION語句設(shè)語句設(shè)置:置:SAVE TRANSACTION 保管點名保管點名 | 保管點變量名保管點變量名 【例【例7.2】 定義一個事務(wù),向定義一個事務(wù),向XSCJ數(shù)據(jù)庫的數(shù)據(jù)庫的XS表中插入一行數(shù)據(jù),然后刪除該表中插入一行數(shù)據(jù),然后刪除該行。行。BEGIN TRANSACTION USE XSCJINSERT INTO XS 學(xué)號,學(xué)號, 姓名,姓名, 性別,性別, 出生時間,出

6、生時間, 專業(yè)專業(yè) VALUES07050104, 朱一虹朱一虹, 1, 1989-10-21, 計算機運用計算機運用SAVE TRAN My_savDELETE FROM XS WHERE 姓名姓名 = 朱一虹朱一虹ROLLBACK TRAN My_savCOMMIT TRAN7.1.2 事務(wù)類型與事務(wù)的形狀執(zhí)行上述事務(wù)后,可知:新插入的數(shù)據(jù)行并沒有被刪除,由于事務(wù)中運用ROLLBACK語句將操作回滾到保管點My_sav,即刪除前的形狀。2事務(wù)的形狀圖7.1闡明了一個事務(wù)對數(shù)據(jù)庫進展操作時,其生存周期內(nèi)能夠進入的形狀。圖7.1 事務(wù)的形狀描畫7.1.2 事務(wù)類型與事務(wù)的形狀活動形狀:表示事務(wù)

7、正在執(zhí)行中。提交未完成形狀:表示事務(wù)雖然已完成,但事務(wù)對數(shù)據(jù)的更新能夠還在緩沖區(qū),未寫到數(shù)據(jù)庫中。失敗形狀:在兩種形狀下,事務(wù)能夠進入失敗形狀。 一個處于活動形狀的事務(wù)在執(zhí)行過程中發(fā)生缺點,將進入失敗形狀。 一個處于提交未完成形狀的事務(wù)執(zhí)行時發(fā)生缺點,將進入失敗形狀。對于處于失敗形狀的事務(wù)必需進展回滾,才干使數(shù)據(jù)庫處于一致形狀。提交已完成形狀:處于提交已完成形狀的事務(wù)表示事務(wù)已執(zhí)行終了,數(shù)據(jù)已寫入數(shù)據(jù)庫,并處于一致形狀。終止形狀:表示事務(wù)執(zhí)行回滾操作,數(shù)據(jù)庫恢復(fù)到事務(wù)執(zhí)行前的一致形狀。7.2 并發(fā)控制對數(shù)據(jù)庫進展操作的事務(wù)可以以串行方式執(zhí)行,即一個事務(wù)執(zhí)行終了后,另一事務(wù)才開場執(zhí)行,這種調(diào)度方

8、式稱為串行調(diào)度,存在的缺陷是系統(tǒng)資源利用率低,對用戶呼應(yīng)慢。因此通常采用的方案是多個事務(wù)并發(fā)執(zhí)行,這分為兩種情況: 單處置機情況下,多個事務(wù)輪番交叉運轉(zhuǎn),稱為交叉并發(fā)方式; 多處置機的情況下,多個事務(wù)在多個處置機上同時運轉(zhuǎn),稱為同時并發(fā)執(zhí)行,在并發(fā)執(zhí)行方式下,當(dāng)多個事務(wù)同時對數(shù)據(jù)庫中的同一數(shù)據(jù)進展操作時,假設(shè)DBMS 不進展有效的管理和控制,就會破壞數(shù)據(jù)的一致性。7.2.1 并發(fā)控制需處理的問題多個事務(wù)并發(fā)執(zhí)行時,數(shù)據(jù)的不一致主要表現(xiàn)為:數(shù)據(jù)喪失更新、讀“臟數(shù)據(jù)、不可反復(fù)讀。1數(shù)據(jù)喪失更新所謂喪失更新Lost Update,是指兩個或多個事務(wù)在并發(fā)執(zhí)行的情況下,都對同一數(shù)據(jù)項更新即先讀后改,再

9、寫入,從而導(dǎo)致后面的更新覆蓋前面的更新。例如,對于聯(lián)網(wǎng)售票系統(tǒng),設(shè)有兩個事務(wù)T1,T2都要求訪問數(shù)據(jù)項A,設(shè)事務(wù)T1,T2執(zhí)行前A的值為20,T1,T2的執(zhí)行順序如圖7.2所示,當(dāng)事務(wù)T1讀得的值為20,T2讀得的值也是20;T1寫入A的值為19,T2寫入A的值也是19,顯然這與現(xiàn)實不符,這是由于兩個事務(wù)并發(fā)地對同一數(shù)據(jù)寫入而引起的,因此這種情況又稱為寫-寫沖突。2讀“臟數(shù)據(jù)讀“臟數(shù)據(jù)是由于一個事務(wù)正在讀另一個更新事務(wù)尚未提交的數(shù)據(jù)引起的,這種數(shù)據(jù)不一致的情況又稱為讀-寫沖突。例如,對于如圖7.3所示的兩個并發(fā)執(zhí)行的事務(wù)T1,T2,T2先讀得A的值,T1讀得A的值,修正并寫入,然后T2讀得T1

10、修正后的A的值,T1執(zhí)行回滾操作,顯然T2第二次讀到的A的值是一個不存在的值,這是一個“臟數(shù)據(jù)。讀“臟數(shù)據(jù)是由讀-寫沖突引起的。7.2.1 并發(fā)控制需處理的問題圖7.2 數(shù)據(jù)喪失更新 圖7.3 讀“臟數(shù)據(jù)7.2.1 并發(fā)控制需處理的問題3不可反復(fù)讀不可反復(fù)讀分3種情況: 對于并發(fā)執(zhí)行的兩個事務(wù)T1,T2,當(dāng)事務(wù)T1讀取數(shù)據(jù)某一數(shù)據(jù)后,事務(wù)T2對該數(shù)據(jù)執(zhí)行了更新操作,使得T1無法再次讀取與前一次一樣的結(jié)果,如圖7.4所示,T1讀數(shù)據(jù)A后,T2修正了數(shù)據(jù)A,T1再次讀數(shù)據(jù)A,卻得到不同的結(jié)果。 事務(wù)T1按一定條件讀取某些數(shù)據(jù)記錄后,事務(wù)T2插入了一些記錄,T1再次以一樣條件讀取記錄時得到不同的結(jié)果

11、集。 事務(wù)T1按一定條件讀取某些數(shù)據(jù)記錄后,事務(wù)T2刪除了其中的一些記錄,T1再次以一樣條件讀取記錄時得到不同的結(jié)果集。后面兩種情況又稱為“幻像讀。不可反復(fù)讀也是由讀-寫沖突引起的。圖7.4 不可反復(fù)讀7.2.2 封鎖實現(xiàn)并發(fā)控制的一個重要技術(shù)是封鎖機制,其根本思想是:事務(wù)T在對某個數(shù)據(jù)對象如表、記錄等操作之前,先向DBMS發(fā)出懇求,懇求對該數(shù)據(jù)對象加鎖。當(dāng)?shù)玫芥i后,才可對該數(shù)據(jù)對象進展相應(yīng)的操作,在事務(wù)T釋放鎖之前,其他事務(wù)不能更新此數(shù)據(jù)對象。DBMS通常提供了多種類型的封鎖。一個事務(wù)對某個數(shù)據(jù)對象加鎖后終究擁有什么樣的控制是由封鎖的類型決議的。按鎖的功能,普通將鎖分為如下幾類。1封鎖類型1

12、共享S鎖共享鎖又稱為讀鎖,一個事務(wù)T要讀取數(shù)據(jù)對象A首先必需對A加共享鎖,然后才干讀A,一旦讀取終了,便釋放A上的共享鎖,除非將事務(wù)隔離級別設(shè)置為可反復(fù)讀或更高級別,或者在事務(wù)生存周期內(nèi)用鎖定提示保管共享鎖。當(dāng)一個數(shù)據(jù)對象上已存在共享鎖時,其他事務(wù)可以讀取數(shù)據(jù),但不能修正數(shù)據(jù)。2排他X鎖排他鎖又稱為獨占鎖、寫鎖,一個事務(wù)T要更改數(shù)據(jù)對象A首先必需對A加排他鎖,然后才干讀或更改A,在T釋放A上的排他鎖之前,其他任何事務(wù)不能讀取或更改A。3更新U鎖當(dāng)一個事務(wù)T對數(shù)據(jù)對象A加更新鎖,首先對數(shù)據(jù)對象做更新鎖鎖定,這樣數(shù)據(jù)將不能被修正,但可以讀取,等到執(zhí)行數(shù)據(jù)更新操作時,自動將更新鎖轉(zhuǎn)換為獨占鎖,但當(dāng)對

13、象上有其他鎖存在時,無法對其作更新鎖鎖定。 7.2.2 封鎖4意向鎖對于數(shù)據(jù)庫中的數(shù)據(jù)對象,可用如圖7.5所示的層次樹表示。意向鎖表示一個事務(wù)為了訪問數(shù)據(jù)庫對象層次構(gòu)造中的某些底層資源如表中的元組而加共享鎖或排他鎖的意向。意向鎖可以提高系統(tǒng)性能,由于DBMS僅在表級檢查意向鎖就可確定事務(wù)能否可以平安地獲取該表上的鎖,而無須檢查表中每個元組的鎖來確定事務(wù)能否可以鎖定整個表。意向鎖包括意向共享IS、意向排他IX及意向排他共享SIX。圖7.5 數(shù)據(jù)庫對象的層次樹7.2.2 封鎖意向共享IS鎖:假設(shè)對一個數(shù)據(jù)對象加IS鎖,表示擬對它的后裔節(jié)點加S鎖,讀取底層的數(shù)據(jù)。例如,假設(shè)要對某個元組加S鎖,那么首

14、先應(yīng)對元組所在的關(guān)系或數(shù)據(jù)庫加IS鎖。意向排他IX鎖:假設(shè)對一個數(shù)據(jù)對象加IX鎖,表示擬對它的后裔節(jié)點加X鎖,更新底層的數(shù)據(jù)。例如,假設(shè)要對某個關(guān)系加X鎖,以便插入一個元組,那么首先應(yīng)對數(shù)據(jù)庫加IX鎖。意向排他共享SIX鎖:假設(shè)對一個數(shù)據(jù)對象加SIX鎖,表示對它加S鎖,再加IX鎖,即SIX=S+IX。例如,對某個表加SIX鎖,那么表示該事務(wù)要讀整個表所以要對該表加S鎖,同時會更新個別元組所以要對該表加IX鎖。表7.1給出了上述封鎖類型的作用。有些鎖之間是相容的,如共享鎖和更新鎖;有些鎖之間是不相容的,如共享鎖和排他鎖。表7.2列出了各種鎖之間的相容性。7.2.2 封鎖表7.1 鎖類型及其作用鎖

15、 模 式描 述共享 (S)用于只讀操作,如 SELECT 語句更新 (U)用于可更新的資源中,防止當(dāng)多個會話在讀取、鎖定及隨后可能進行的資源更新時發(fā)生常見形式的死鎖排他(X)用于數(shù)據(jù)修改操作,如 INSERT,UPDATE 或 DELETE,確保不會同時對同一資源進行多重更新意向用于建立鎖的層次結(jié)構(gòu),意向鎖的類型為意向共享 (IS)、意向排他(IX)及意向排他共享(SIX)表7.2 各種鎖之間的相容性鎖 模 式ISSUIXSIXXIS相容相容相容相容相容不相容S相容兼容相容不相容不相容不相容U相容相容不相容不相容不相容不相容IX相容不相容不相容相容不相容不相容SIX相容不相容不相容不相容不相容

16、不相容X不相容不相容不相容不相容不相容不相容7.2.2 封鎖當(dāng)一個事務(wù)T懇求對數(shù)據(jù)對象A加鎖時,假設(shè)該數(shù)據(jù)對象上已加了鎖,新加的鎖必需滿足表7.2中鎖的相容性。不同的DBMS支持的鎖類型能夠不同,例如,對于SQL Server共有6種鎖類型,分別是:共享、更新、排他、意向、架構(gòu)和大容量更新,所以針對詳細(xì)的DBMS,應(yīng)參考其運用手冊。2封鎖粒度被鎖定的對象的數(shù)據(jù)量稱為封鎖粒度。封鎖對象可以是邏輯單元,也可以是物理單元。以關(guān)系數(shù)據(jù)庫為例,封鎖對象可以是行、列、索引項、頁、擴展盤區(qū)、表和數(shù)據(jù)庫等。封鎖粒度不同,系統(tǒng)的開銷將不同,并且鎖定粒度與數(shù)據(jù)庫訪問并發(fā)度是矛盾的,鎖定粒度大,系統(tǒng)開銷小但并發(fā)度會

17、降低,且對DBMS來說內(nèi)部管理更簡單;鎖定粒度小,系統(tǒng)開銷大,但可提高并發(fā)度。選擇封鎖粒度時必需同時思索開銷和并發(fā)度兩個要素,進展權(quán)衡,以求得最優(yōu)的效果。普通原那么為: 需求處置大量元組的用戶事務(wù),以關(guān)系為封鎖單元。 需求處置多個關(guān)系的大量元組的用戶事務(wù),以數(shù)據(jù)庫為封鎖單元。 只處置少量元組的用戶事務(wù),以元組為封鎖單元。7.2.3 事務(wù)的隔離級別事務(wù)的隔離級別定義了事務(wù)并發(fā)執(zhí)行時,事務(wù)之間的隔離程度。如前所述,事務(wù)并發(fā)執(zhí)行時,有能夠出現(xiàn)數(shù)據(jù)喪失更新、讀“臟數(shù)據(jù)、不可反復(fù)讀,為了防止這些數(shù)據(jù)不一致的情況,在規(guī)范SQL規(guī)范中,定義了如下4個事務(wù)隔離級別,不同的隔離級別對事務(wù)的處置不同。 未授權(quán)讀取

18、Read Uncommitted:允許讀“臟數(shù)據(jù),但不允許更新喪失。假設(shè)一個事務(wù)曾經(jīng)開場寫數(shù)據(jù),那么允許其他事務(wù)讀此數(shù)據(jù),但不允許同時進展寫操作。 授權(quán)讀取Read Committed:讀取數(shù)據(jù)的事務(wù)允許其他并行事務(wù)訪問該數(shù)據(jù),但是未提交的寫事務(wù)將制止其他事務(wù)同時訪問該數(shù)據(jù)。這是大多數(shù)主流數(shù)據(jù)庫的默許事務(wù)隔離等級,保證了一個事務(wù)不會讀到另一個并行事務(wù)已修正但未提交的數(shù)據(jù),防止了讀“臟數(shù)據(jù)。該級別適用于大多數(shù)系統(tǒng)。 可反復(fù)讀Repeatable Read:制止不可反復(fù)讀和讀“臟數(shù)據(jù),但有時能夠出現(xiàn)“幻像數(shù)據(jù),讀取數(shù)據(jù)的事務(wù)將會制止寫事務(wù)但允許讀事務(wù),寫事務(wù)那么制止任何其他事務(wù),這保證了一個事務(wù)不

19、會修正曾經(jīng)由另一個事務(wù)讀取但未提交回滾的數(shù)據(jù)。防止了讀“臟數(shù)據(jù)和“不可反復(fù)讀的情況。 序列化Serializable:提供嚴(yán)厲的事務(wù)隔離,它要求事務(wù)序列化執(zhí)行,即事務(wù)只能一個接著一個地執(zhí)行。事務(wù)的隔離級別越高,越能保證數(shù)據(jù)的完好性和一致性,但是對并發(fā)性能的影響也越大。對于大多數(shù)運用程序,可以優(yōu)先思索把數(shù)據(jù)庫系統(tǒng)的隔離級別設(shè)為Read Committed,它可以防止讀“臟數(shù)據(jù),而且有較好的并發(fā)性能。7.2.4 死鎖假設(shè)兩個或多個事務(wù)每個都持有另一事務(wù)所需資源上的鎖,沒有這些資源,每個事務(wù)都無法繼續(xù)完成其任務(wù),這種情況稱為死鎖。以下是一個簡單的死鎖場景: 事務(wù)A訪問表T,并懇求頁面X上的排他鎖;

20、事務(wù)B訪問表T,并懇求頁面Y上的排他鎖; 事務(wù)A懇求頁面Y上的鎖,同時持有頁面X上的排他鎖,事務(wù)A將被掛起,由于事務(wù)B持有頁面Y上的排他鎖; 事務(wù)B懇求頁面X上的鎖,同時持有頁面Y上的排他鎖,事務(wù)B將被掛起,由于事務(wù)A持有頁面X上的排他鎖。此時,事務(wù)的執(zhí)行進入一種僵持形狀,即發(fā)生了死鎖,運用程序A和B都無法繼續(xù)任務(wù)。目前處理并發(fā)事務(wù)死鎖問題的方法主要有:一是采取措施預(yù)防死鎖發(fā)生;二是允許死鎖發(fā)生,采用一定的手段檢測能否有死鎖,假設(shè)有就解除死鎖。1死鎖的預(yù)防防止死鎖的發(fā)生就是要破壞產(chǎn)生死鎖的條件,通常有如下兩種方法。7.2.4 死鎖1死鎖的預(yù)防防止死鎖的發(fā)生就是要破壞產(chǎn)生死鎖的條件,通常有如下兩種方法。1一次封鎖法要求每個事務(wù)必需一次將一切要訪問的數(shù)據(jù)對象全部加鎖,否那么就不能繼續(xù)執(zhí)行。該方法可有效地預(yù)防死鎖,但存在的問題是:一次就將以后要訪問的全部數(shù)據(jù)對象加鎖,擴展了封鎖的范圍,從而降低了系統(tǒng)的并發(fā)度。另外,數(shù)據(jù)庫中的數(shù)據(jù)是不斷變化的,很難事先準(zhǔn)確地確定每個事務(wù)所要封鎖的數(shù)據(jù)對象。2順序封鎖法預(yù)先對數(shù)據(jù)對象規(guī)定一個封鎖順序,一切事務(wù)都按這個順序?qū)嵭蟹怄i。該方法可以有效地預(yù)防死鎖,但存在的問題是: 數(shù)據(jù)庫系統(tǒng)中可封鎖的數(shù)據(jù)對象極多,并且隨著數(shù)據(jù)的插入、刪除等操作而不斷變化,要維護這些數(shù)據(jù)對象的封鎖順序非常

溫馨提示

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

評論

0/150

提交評論