數(shù)據(jù)庫(kù)并發(fā)控制_第1頁(yè)
數(shù)據(jù)庫(kù)并發(fā)控制_第2頁(yè)
數(shù)據(jù)庫(kù)并發(fā)控制_第3頁(yè)
數(shù)據(jù)庫(kù)并發(fā)控制_第4頁(yè)
數(shù)據(jù)庫(kù)并發(fā)控制_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、.數(shù)據(jù)庫(kù)是一個(gè)共享資源,可以提供多個(gè)用戶使用。這些用戶程序可以一個(gè)一個(gè)地串行執(zhí)行,每個(gè)時(shí)刻只有一個(gè)用戶程序運(yùn)行,執(zhí)行對(duì)數(shù)據(jù)庫(kù)的存取,其他用戶程序必須等到這個(gè)用戶程序結(jié)束以后方能對(duì)數(shù)據(jù)庫(kù)存取。但是如果一個(gè)用戶程序涉及大量數(shù)據(jù)的輸入/輸出交換,則數(shù)據(jù)庫(kù)系統(tǒng)的大部分時(shí)間處于閑置狀態(tài)。因此,為了充分利用數(shù)據(jù)庫(kù)資源,發(fā)揮數(shù)據(jù)庫(kù)共享資源的特點(diǎn),應(yīng)該允許多個(gè)用戶并行地存取數(shù)據(jù)庫(kù)。但這樣就會(huì)產(chǎn)生多個(gè)用戶程序并發(fā)存取同一數(shù)據(jù)的情況,若對(duì)并發(fā)操作不加控制就可能會(huì)存取和存儲(chǔ)不正確的數(shù)據(jù),破壞數(shù)據(jù)庫(kù)的一致性,所以數(shù)據(jù)庫(kù)管理系統(tǒng)必須提供并發(fā)控制機(jī)制。并發(fā)控制機(jī)制的好壞是衡量一個(gè)數(shù)據(jù)庫(kù)管理系統(tǒng)性能的重要標(biāo)志之一。DM用封

2、鎖機(jī)制來(lái)解決并發(fā)問(wèn)題。它可以保證任何時(shí)候都可以有多個(gè)正在運(yùn)行的用戶程序,但是所有用戶程序都在彼此完全隔離的環(huán)境中運(yùn)行。一、 并發(fā)控制的預(yù)備知識(shí)(一) 并發(fā)控制概述并發(fā)控制是以事務(wù)(transaction)為單位進(jìn)行的。1. 并發(fā)控制的單位事務(wù)事務(wù)是數(shù)據(jù)庫(kù)的邏輯工作單位,它是用戶定義的一組操作序列。一個(gè)事務(wù)可以是一組SQL語(yǔ)句、一條SQL語(yǔ)句或整個(gè)程序。事務(wù)的開(kāi)始和結(jié)束都可以由用戶顯示的控制,如果用戶沒(méi)有顯式地定義事務(wù),則由數(shù)據(jù)庫(kù)系統(tǒng)按缺省規(guī)定自動(dòng)劃分事務(wù)。事務(wù)應(yīng)該具有4種屬性:原子性、一致性、隔離性和持久性。(1)原子性事務(wù)的原子性保證事務(wù)包含的一組更新操作是原子不可分的,也就是說(shuō)這些操作是一

3、個(gè)整體,對(duì)數(shù)據(jù)庫(kù)而言全做或者全不做,不能部分的完成。這一性質(zhì)即使在系統(tǒng)崩潰之后仍能得到保證,在系統(tǒng)崩潰之后將進(jìn)行數(shù)據(jù)庫(kù)恢復(fù),用來(lái)恢復(fù)和撤銷系統(tǒng)崩潰處于活動(dòng)狀態(tài)的事務(wù)對(duì)數(shù)據(jù)庫(kù)的影響,從而保證事務(wù)的原子性。系統(tǒng)對(duì)磁盤(pán)上的任何實(shí)際數(shù)據(jù)的修改之前都會(huì)將修改操作信息本身的信息記錄到磁盤(pán)上。當(dāng)發(fā)生崩潰時(shí),系統(tǒng)能根據(jù)這些操作記錄當(dāng)時(shí)該事務(wù)處于何種狀態(tài),以此確定是撤銷該事務(wù)所做出的所有修改操作,還是將修改的操作重新執(zhí)行。(2)一致性一致性要求事務(wù)執(zhí)行完成后,將數(shù)據(jù)庫(kù)從一個(gè)一致?tīng)顟B(tài)轉(zhuǎn)變到另一個(gè)一致?tīng)顟B(tài)。它是一種以一致性規(guī)則為基礎(chǔ)的邏輯屬性,例如在轉(zhuǎn)賬的操作中,各賬戶金額必須平衡,這一條規(guī)則對(duì)于程序員而言是一個(gè)強(qiáng)

4、制的規(guī)定,由此可見(jiàn),一致性與原子性是密切相關(guān)的。事務(wù)的一致性屬性要求事務(wù)在并發(fā)執(zhí)行的情況下事務(wù)的一致性仍然滿足。它在邏輯上不是獨(dú)立的,它由事務(wù)的隔離性來(lái)表示。(3) 隔離性隔離性意味著一個(gè)事務(wù)的執(zhí)行不能被其他事務(wù)干擾。即一個(gè)事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對(duì)并發(fā)的其他事務(wù)是隔離的,并發(fā)執(zhí)行的各個(gè)事務(wù)之間不能互相干擾。它要求即使有多個(gè)事務(wù)并發(fā)執(zhí)行,看上去每個(gè)成功事務(wù)按串行調(diào)度執(zhí)行一樣。這一性質(zhì)的另一種稱法為可串行性,也就是說(shuō)系統(tǒng)允許的任何交錯(cuò)操作調(diào)度等價(jià)于一個(gè)串行調(diào)度。串行調(diào)度的意思是每次調(diào)度一個(gè)事務(wù),在一個(gè)事務(wù)的所有操作沒(méi)有結(jié)束之前,另外的事務(wù)操作不能開(kāi)始。由于性能原因,我們需要進(jìn)行交錯(cuò)操作的調(diào)度,

5、但我們也希望這些交錯(cuò)操作的調(diào)度的效果和某一個(gè)串行調(diào)度是一致的。 DM實(shí)現(xiàn)該機(jī)制是通過(guò)對(duì)事務(wù)的數(shù)據(jù)訪問(wèn)對(duì)象加適當(dāng)?shù)逆i,從而排斥其他的事務(wù)對(duì)同一數(shù)據(jù)庫(kù)對(duì)象的并發(fā)操作。(4)持久性系統(tǒng)提供的持久性保證要求一旦事務(wù)提交,那么對(duì)數(shù)據(jù)庫(kù)所做的修改將是持久的,無(wú)論發(fā)生何種機(jī)器和系統(tǒng)故障都不應(yīng)該對(duì)其有任何影響。例如,自動(dòng)柜員機(jī)( ATM)在向客戶支付一筆錢(qián)時(shí),就不用擔(dān)心丟失客戶的取款記錄。事務(wù)的持久性保證事務(wù)對(duì)數(shù)據(jù)庫(kù)的影響是持久的,即使系統(tǒng)崩潰。正如在講原子性時(shí)所提到的那樣,系統(tǒng)通過(guò)做記錄來(lái)提供這一保證。DM沒(méi)有提供顯式定義事務(wù)開(kāi)始的語(yǔ)句,第一個(gè)可執(zhí)行的SQL語(yǔ)句(除CONNECT語(yǔ)句外)隱含事務(wù)的開(kāi)始,但事

6、務(wù)的結(jié)束可以由用戶顯式的控制。在DM中以下幾種情況都結(jié)束 (正常,非正常)某一事務(wù):(1)當(dāng)某一連接的屬性設(shè)置為自動(dòng)提交,每執(zhí)行一條語(yǔ)句都會(huì)提交;(2)遇到COMMIT/ROLLBACK語(yǔ)句,便提交/回滾一事務(wù);(3)當(dāng)系統(tǒng)的 DDL自動(dòng)提交開(kāi)關(guān)打開(kāi)時(shí)(缺省為打開(kāi)),遇到DDL語(yǔ)句則自動(dòng)提交該DDL語(yǔ)句和以前的DML和DDL操作;(4)事務(wù)所在的程序正常結(jié)束和用戶退出;(5)系統(tǒng)非正常終止時(shí);說(shuō)明:DM在配置文件中提供了DDL語(yǔ)句的自動(dòng)提交開(kāi)關(guān)DDL_AUTO_COMMIT。 當(dāng)此配置項(xiàng)的值為 1(缺省情況)時(shí),所有DDL語(yǔ)句自動(dòng)提交;當(dāng)此配置項(xiàng)的值為0時(shí),除CREATEDATABASE、AL

7、TERDATABASE和CREATESCHEMA語(yǔ)句外的所有DDL語(yǔ)句都不自動(dòng)提交。DM中的一致性是以事務(wù)為基礎(chǔ)的。DM通過(guò)提交和回滾分別用于將對(duì)數(shù)據(jù)庫(kù)的修改永久化和廢除,但是無(wú)論是提交和回滾,DM保證數(shù)據(jù)庫(kù)在每個(gè)事務(wù)開(kāi)始前、結(jié)束后是一致的。為了提高事務(wù)管理的靈活性,DM提供了設(shè)置保存點(diǎn)(SAVEPOINT)語(yǔ)句和回滾到保存點(diǎn)語(yǔ)句。保存點(diǎn)提供了一種靈活的回滾,事務(wù)在執(zhí)行中可以回滾到某個(gè)保存點(diǎn),在該保存點(diǎn)以前的操作有效,而以后的操作被回滾掉。DM中的事務(wù)同樣具有上述4個(gè)屬性:原子性、一致性、隔離性和持久性。2. 并發(fā)操作與數(shù)據(jù)的不一致性如果沒(méi)有鎖定且多個(gè)用戶同時(shí)訪問(wèn)一個(gè)數(shù)據(jù)庫(kù),則當(dāng)他們的事務(wù)同時(shí)

8、使用相同的數(shù)據(jù)時(shí)可能會(huì)發(fā)生問(wèn)題,導(dǎo)致數(shù)據(jù)庫(kù)中的數(shù)據(jù)的不一致性。一個(gè)最常見(jiàn)的并發(fā)操作的例子是火車/飛機(jī)訂票系統(tǒng)中的訂票操作。例如,在該系統(tǒng)中的一個(gè)活動(dòng)序列: 甲售票員讀出某航班的機(jī)票張數(shù)余額A,設(shè)A=16; 乙售票員讀出同一航班的機(jī)票張數(shù)余額A,也是16; 甲售票員賣出一張機(jī)票,修改機(jī)票張數(shù)余額A=A-1=15,把A寫(xiě)回?cái)?shù)據(jù)庫(kù); 乙售票員也賣出一張機(jī)票,修改機(jī)票張數(shù)余額A=A-1=15,把A寫(xiě)回?cái)?shù)據(jù)庫(kù)。結(jié)果明明賣出兩張機(jī)票,數(shù)據(jù)庫(kù)中機(jī)票余額只減少1。這種情況稱為數(shù)據(jù)庫(kù)的不一致性。這種不一致性是由甲、乙兩個(gè)售票員并發(fā)操作引起的。在并發(fā)操作情況下,對(duì)甲、乙兩個(gè)事務(wù)操作序列的調(diào)度是隨機(jī)的。若按上面的調(diào)

9、度序列行,甲事務(wù)的修改就被丟失。這是由于第4步中乙事務(wù)修改A并寫(xiě)回覆蓋了甲事務(wù)的修改。并發(fā)操作帶來(lái)的數(shù)據(jù)庫(kù)不一致性可以分為四類:丟失或覆蓋更新、臟讀、不可重復(fù)讀和幻像讀,上例只是并發(fā)問(wèn)題的一種。(1) 丟失或覆蓋更新(lost update)當(dāng)兩個(gè)或多個(gè)事務(wù)選擇同一數(shù)據(jù),并且基于最初選定的值更新該數(shù)據(jù)時(shí),會(huì)發(fā)生丟失更新問(wèn)題。每個(gè)事務(wù)都不知道其它事務(wù)的存在。最后的更新將重寫(xiě)由其它事務(wù)所做的更新,這將導(dǎo)致數(shù)據(jù)丟失。上面預(yù)定飛機(jī)票的例子就屬于這種并發(fā)問(wèn)題。事務(wù)1與事務(wù)2先后讀入同一數(shù)據(jù)A=16,事務(wù)1執(zhí)行A-1,并將結(jié)果A=15寫(xiě)回,事務(wù)2執(zhí)行A-1,并將結(jié)果A=15寫(xiě)回。事務(wù)2提交的結(jié)果覆蓋了事務(wù)

10、1對(duì)數(shù)據(jù)庫(kù)的修改,從而使事務(wù)1對(duì)數(shù)據(jù)庫(kù)的修改丟失了。(2) 臟讀一個(gè)事務(wù)讀取了另一個(gè)未提交的并行事務(wù)寫(xiě)的數(shù)據(jù)。當(dāng)?shù)诙€(gè)事務(wù)選擇其它事務(wù)正在更新的行時(shí),會(huì)發(fā)生未確認(rèn)的相關(guān)性問(wèn)題。第二個(gè)事務(wù)正在讀取的數(shù)據(jù)還沒(méi)有確認(rèn)并且可能由更新此行的事務(wù)所更改。換句話說(shuō),當(dāng)事務(wù)1修改某一數(shù)據(jù),并將其寫(xiě)回磁盤(pán),事務(wù)2讀取同一數(shù)據(jù)后,事務(wù)1由于某種原因被撤銷,這時(shí)事務(wù)1已修改過(guò)的數(shù)據(jù)恢復(fù)原值,事務(wù)2讀到的數(shù)據(jù)就與數(shù)據(jù)庫(kù)中的數(shù)據(jù)不一致,是不正確的數(shù)據(jù),稱為臟讀。例如,在下圖中,事務(wù)1將C值修改為200,事務(wù)2讀到C為200,而事務(wù)1由于某種原因撤銷,其修改作廢,C恢復(fù)原值100,這時(shí)事務(wù)2讀到的就是不正確的“臟“數(shù)據(jù)了

11、。(3) 不可重復(fù)讀(nonrepeatable read)一個(gè)事務(wù)重新讀取前面讀取過(guò)的數(shù)據(jù),發(fā)現(xiàn)該數(shù)據(jù)已經(jīng)被另一個(gè)已提交的事務(wù)修改過(guò)。即事務(wù)1讀取某一數(shù)據(jù)后,事務(wù)2對(duì)其做了修改,當(dāng)事務(wù)1再次讀數(shù)據(jù)時(shí),得到的與第一次不同的值。例如,在下圖中,事務(wù)1讀取B=100進(jìn)行運(yùn)算,事務(wù)2讀取同一數(shù)據(jù)B,對(duì)其進(jìn)行修改后將B=200寫(xiě)回?cái)?shù)據(jù)庫(kù)。事務(wù)1為了對(duì)讀取值校對(duì)重讀B,B已為200,與第一次讀取值不一致。(4) 幻像讀如果一個(gè)事務(wù)在提交查詢結(jié)果之前,另一個(gè)事務(wù)可以更改該結(jié)果,就會(huì)發(fā)生這種情況。這句話也可以這樣解釋,事務(wù)1按一定條件從數(shù)據(jù)庫(kù)中讀取某些數(shù)據(jù)記錄后未提交查詢結(jié)果,事務(wù)2刪除了其中部分記錄,事務(wù)

12、1再次按相同條件讀取數(shù)據(jù)時(shí),發(fā)現(xiàn)某些記錄神秘地消失了;或者事務(wù)1按一定條件從數(shù)據(jù)庫(kù)中讀取某些數(shù)據(jù)記錄后未提交查詢結(jié)果,事務(wù)2插入了一些記錄,當(dāng)事務(wù)1再次按相同條件讀取數(shù)據(jù)時(shí),發(fā)現(xiàn)多了一些記錄。產(chǎn)生上述四類數(shù)據(jù)不一致性的主要原因是并發(fā)操作破壞了事務(wù)的隔離性。并發(fā)控制就是要用正確的方式調(diào)度并發(fā)操作,使一個(gè)用戶事務(wù)的執(zhí)行不受其他事務(wù)的干擾,從而避免造成數(shù)據(jù)的不一致性。3. 并發(fā)場(chǎng)景列舉結(jié)合SQL語(yǔ)句,列舉各種并發(fā)情況(包括可能導(dǎo)致數(shù)據(jù)不一致性和對(duì)數(shù)據(jù)一致性不產(chǎn)生影響的情況)。A表示某一條數(shù)據(jù),b和c都表示滿足某一個(gè)標(biāo)準(zhǔn)的兩條或多條數(shù)據(jù),表示“非”的意思,表示屬于或包含于的意思,1表示第一個(gè)事務(wù),2表

13、示第二個(gè)事務(wù)。(二) 并發(fā)操作的調(diào)度計(jì)算機(jī)系統(tǒng)對(duì)并行事務(wù)中并行操作的調(diào)度是隨機(jī)的,而不同的調(diào)度可能會(huì)產(chǎn)生不同的結(jié)果,那么哪個(gè)結(jié)果是正確的,哪個(gè)是不正確的呢?如果一個(gè)事務(wù)運(yùn)行過(guò)程中沒(méi)有其他事務(wù)在同時(shí)運(yùn)行,也就是說(shuō)沒(méi)有受到其他事務(wù)的干擾,那么就可能認(rèn)為該事務(wù)的運(yùn)行結(jié)果是正常的或者預(yù)想的,因此將所有事務(wù)串行起來(lái)的調(diào)度策略是正確的調(diào)度策略。雖然以不同的順序串行執(zhí)行事務(wù)也可能會(huì)產(chǎn)生不同的結(jié)果,但由于不會(huì)將數(shù)據(jù)庫(kù)置于不一致?tīng)顟B(tài),所以都可以認(rèn)為是正確的。由此可以得到如下結(jié)論:幾個(gè)事務(wù)的并行執(zhí)行是正確的,當(dāng)且僅當(dāng)其結(jié)果與按某一次序串行地執(zhí)行它們的結(jié)果相同。我們稱這種并行調(diào)度策略為可串行化(serializab

14、le)的調(diào)度??纱行裕╯erializability)是并行事務(wù)正確性的唯一準(zhǔn)則。例如,現(xiàn)在有兩個(gè)事務(wù),分別包含下列操作:事務(wù)1:讀B;A=B+1;寫(xiě)回A;事務(wù)2:讀A;B=A+1;寫(xiě)回B;假設(shè)A的初值為10,B的初值為2。下圖給出了對(duì)這兩個(gè)事務(wù)的三種不同的調(diào)度策略,(a)和(b)為兩種不同的串行調(diào)度策略,雖然執(zhí)行結(jié)果不同,但他們都是正確的調(diào)度。(c)中兩個(gè)事務(wù)是交錯(cuò)執(zhí)行的,由于執(zhí)行結(jié)果與(a)、(b)的結(jié)果都不同,所以是錯(cuò)誤的調(diào)度。(d)中的兩個(gè)事務(wù)也是交錯(cuò)執(zhí)行的,由于執(zhí)行結(jié)果與串行調(diào)度1(圖(a)的執(zhí)行結(jié)果相同,所以是正確的調(diào)度。為了保證并行操作的正確性,DBMS的并行控制機(jī)制必須提供一

15、定的手段來(lái)保證調(diào)度是可串行化的。從理論上講,在某一事務(wù)執(zhí)行時(shí)禁止其他事務(wù)執(zhí)行的調(diào)度策略一定是可串行化的調(diào)度,這也是最簡(jiǎn)單的調(diào)度策略,但這種方法實(shí)際上是不可行的,因?yàn)樗褂脩舨荒艹浞止蚕頂?shù)據(jù)庫(kù)資源。目前DBMS普遍采用封鎖方法(悲觀方法,DM采用的就是這種方法,SQL Server也是采用的這種方法)來(lái)保證調(diào)度的正確性;即保證并行操作調(diào)度的可串行性。除此之外還有其他一些方法,如時(shí)標(biāo)方法、樂(lè)觀方法等。 悲觀并發(fā)控制 鎖定系統(tǒng)阻止用戶以影響其它用戶的方式修改數(shù)據(jù)。如果用戶執(zhí)行的操作導(dǎo)致應(yīng)用了某個(gè)鎖,則直到這個(gè)鎖的所有者釋放該鎖,其它用戶才能執(zhí)行與該鎖沖突的操作。該方法主要用在數(shù)據(jù)爭(zhēng)奪激烈的環(huán)境中,以

16、及出現(xiàn)并發(fā)沖突時(shí)用鎖保護(hù)數(shù)據(jù)的成本比回滾事務(wù)的成本低的環(huán)境中,因此稱該方法為悲觀并發(fā)控制。 樂(lè)觀并發(fā)控制在樂(lè)觀并發(fā)控制中,用戶讀數(shù)據(jù)時(shí)不鎖定數(shù)據(jù)。在執(zhí)行更新時(shí),系統(tǒng)進(jìn)行檢查,查看另一個(gè)用戶讀過(guò)數(shù)據(jù)后是否更改了數(shù)據(jù)。如果另一個(gè)用戶更新了數(shù)據(jù),將產(chǎn)生一個(gè)錯(cuò)誤。一般情況下,接收錯(cuò)誤信息的用戶將回滾事務(wù)并重新開(kāi)始。該方法主要用在數(shù)據(jù)爭(zhēng)奪少的環(huán)境內(nèi),以及偶爾回滾事務(wù)的成本超過(guò)讀數(shù)據(jù)時(shí)鎖定數(shù)據(jù)的成本的環(huán)境內(nèi),因此稱該方法為樂(lè)觀并發(fā)控制。 時(shí)標(biāo)并發(fā)控制時(shí)標(biāo)和封鎖技術(shù)之間的基本區(qū)別是封鎖是使一組事務(wù)的并發(fā)執(zhí)行(即交叉執(zhí)行)同步,使用它等價(jià)于這些事務(wù)的某一串行操作;時(shí)標(biāo)法也是使用一組事務(wù)的交叉執(zhí)行同步,但是使它

17、等價(jià)于這些事務(wù)的一個(gè)特定的串行執(zhí)行,即由時(shí)標(biāo)的時(shí)序所確定的一個(gè)執(zhí)行。如果發(fā)生沖突,是通過(guò)撤銷并重新啟動(dòng)一個(gè)事務(wù)解決的。事務(wù)重新啟動(dòng),則賦予新的時(shí)標(biāo)。(三) 封鎖封鎖是事項(xiàng)并發(fā)控制的一個(gè)非常重要的技術(shù)。所謂封鎖就是事務(wù)T在對(duì)某個(gè)數(shù)據(jù)對(duì)象,例如,在標(biāo)、記錄等操作之前,先向系統(tǒng)發(fā)出請(qǐng)求,對(duì)其加鎖。加鎖后事務(wù)T就對(duì)數(shù)據(jù)庫(kù)對(duì)象有了一定的控制,在事務(wù)T釋放它的鎖之前,其他事務(wù)不能更新此數(shù)據(jù)對(duì)象。1. 封鎖類型DBMS通常提供了多種數(shù)據(jù)類型的封鎖。一個(gè)事務(wù)對(duì)某個(gè)數(shù)據(jù)對(duì)象加鎖后究竟擁有什么樣的控制是由封鎖類型決定的?;镜姆怄i類型有兩種:排他鎖(exclusive lock,簡(jiǎn)記為X鎖)和共享鎖(share

18、lock簡(jiǎn)記為S鎖)排他鎖又稱為寫(xiě)鎖。若事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加上X鎖,則只允許T讀取和修改A,其他任何事務(wù)都不能再對(duì)A加任何類型的鎖,直到T釋放A上的鎖。這就保證了其他事務(wù)在T釋放A上的鎖之前不能再讀取和修改A。共享鎖又稱為讀鎖。若事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加上S鎖,則其他事務(wù)只能再對(duì)A加S鎖,而不能加X(jué)鎖,直到T釋放A上的鎖。這就保證了其他事務(wù)可以讀A,但在T釋放A上的S鎖之前不能對(duì)A做任何修改。排他鎖與共享鎖的控制方式可以用下圖的相容矩陣來(lái)表示。 在下圖的封鎖類型相容矩陣中,最左邊一列表示事務(wù)T1已經(jīng)獲得的數(shù)據(jù)對(duì)象上的鎖的類型,其中橫線表示沒(méi)有加鎖。最上面一行表示另一事務(wù)T2對(duì)同一數(shù)據(jù)對(duì)象發(fā)出的封鎖

19、請(qǐng)求。T2的封鎖請(qǐng)求能否被滿足用Y和N表示,其中Y表示事務(wù)T2的封鎖要求與T1已持有的鎖相容,封鎖請(qǐng)求可以滿足。N表示T2的封鎖請(qǐng)求與T1已持有的鎖沖突,T2請(qǐng)求被拒絕。2. 封鎖粒度X鎖和S鎖都是加在某一個(gè)數(shù)據(jù)對(duì)象上的。封鎖的對(duì)象可以是邏輯單元,也可以是物理單元。例如,在關(guān)系數(shù)據(jù)庫(kù)中,封鎖對(duì)象可以是屬性值、屬性值集合、元組、關(guān)系、索引項(xiàng)、整個(gè)索引、整個(gè)數(shù)據(jù)庫(kù)等邏輯單元;也可以是頁(yè)(數(shù)據(jù)頁(yè)或索引頁(yè))、塊等物理單元。封鎖對(duì)象可以很大,比如對(duì)整個(gè)數(shù)據(jù)庫(kù)加鎖,也可以很小,比如只對(duì)某個(gè)屬性值加鎖。封鎖對(duì)象的大小稱為封鎖的粒度(granularity)。封鎖粒度與系統(tǒng)的并發(fā)度和并發(fā)控制的開(kāi)銷密切相關(guān)。封

20、鎖的粒度越大,系統(tǒng)中能夠被封鎖的對(duì)象就越小,并發(fā)度也就越小,但同時(shí)系統(tǒng)開(kāi)銷也越??;相反,封鎖的粒度越小,并發(fā)度越高,但系統(tǒng)開(kāi)銷也就越大。因此,如果在一個(gè)系統(tǒng)中同時(shí)存在不同大小的封鎖單元供不同的事務(wù)選擇使用是比較理想的。而選擇封鎖粒度時(shí)必須同時(shí)考慮封鎖機(jī)構(gòu)和并發(fā)度兩個(gè)因素,對(duì)系統(tǒng)開(kāi)銷與并發(fā)度進(jìn)行權(quán)衡,以求得最優(yōu)的效果。一般說(shuō)來(lái),需要處理大量元組的用戶事務(wù)可以以關(guān)系為封鎖單元;需要處理多個(gè)關(guān)系的大量元組的用戶事務(wù)可以以數(shù)據(jù)庫(kù)為封鎖單位;而對(duì)于一個(gè)處理少量元組的用戶事務(wù),可以以元組為封鎖單位以提高并發(fā)度。3. 封鎖協(xié)議封鎖的目的是為了保證能夠正確地調(diào)度并發(fā)操作。為此,在運(yùn)用X鎖和S鎖這兩種基本封鎖,

21、對(duì)一定粒度的數(shù)據(jù)對(duì)象加鎖時(shí),還需要約定一些規(guī)則,例如,應(yīng)何時(shí)申請(qǐng)X鎖或S鎖、持鎖時(shí)間、何時(shí)釋放等。我們稱這些規(guī)則為封鎖協(xié)議(locking protocol)。對(duì)封鎖方式規(guī)定不同的規(guī)則,就形成了各種不同的封鎖協(xié)議,它們分別在不同的程度上為并發(fā)操作的正確調(diào)度提供一定的保證。本節(jié)介紹保證數(shù)據(jù)一致性的三級(jí)封鎖協(xié)議和保證并行調(diào)度可串行性的兩段鎖協(xié)議,下一節(jié)將介紹避免死鎖的封鎖協(xié)議。(5) 保證數(shù)據(jù)一致性的封鎖協(xié)議三級(jí)封鎖協(xié)議對(duì)并發(fā)操作的不正確調(diào)度可能會(huì)帶來(lái)四種數(shù)據(jù)不一致性:丟失或覆蓋更新、臟讀、不可重復(fù)讀和幻想讀。三級(jí)封鎖協(xié)議分別在不同程度上解決了這一問(wèn)題。 1級(jí)封鎖協(xié)議1級(jí)封鎖協(xié)議的內(nèi)容是:事務(wù)T在

22、修改數(shù)據(jù)R之前必須先對(duì)其加X(jué)鎖,直到事務(wù)結(jié)束才釋放。事務(wù)結(jié)束包括正常結(jié)束(commit)和非正常結(jié)束(rollback)。1級(jí)封鎖協(xié)議可以防止丟失或覆蓋更新,并保證事務(wù)T是可以恢復(fù)的。例如,下圖使用1級(jí)封鎖協(xié)議解決了定飛機(jī)票例子的丟失更新問(wèn)題。上圖中,事務(wù)1在讀A進(jìn)行修改之前先對(duì)A加X(jué)鎖,當(dāng)事務(wù)2再請(qǐng)求對(duì)A加X(jué)鎖時(shí)被拒絕,只能等事務(wù)1釋放A上的鎖。事務(wù)1修改值A(chǔ)=15寫(xiě)回磁盤(pán),釋放A上的X鎖后,事務(wù)2獲得對(duì)A的X鎖,這時(shí)他讀到的A已經(jīng)是事務(wù)1更新過(guò)的值15,再按此新的A值進(jìn)行運(yùn)算,并將結(jié)果值A(chǔ)=14回到磁盤(pán)。這樣就避免了丟失事務(wù)1的更新。在1級(jí)封鎖協(xié)議中,如果僅僅是讀數(shù)據(jù)不對(duì)其進(jìn)行修改,是不需

23、要加鎖的,所以它不能保證可重復(fù)讀和臟讀。 2級(jí)封鎖協(xié)議2級(jí)封鎖協(xié)議的內(nèi)容是:1級(jí)封鎖協(xié)議加上事務(wù)T在讀取數(shù)據(jù)R之前必須先對(duì)其加S鎖,讀完后即可釋放S鎖。2級(jí)封鎖協(xié)議除防止了丟失或覆蓋更新,還可進(jìn)一步防止臟讀。例如,下圖使用2級(jí)封鎖協(xié)議解決了臟讀的問(wèn)題。|下圖中,事務(wù)1在對(duì)C進(jìn)行修改之前,先對(duì)C加X(jué)鎖,修改其值后寫(xiě)回磁盤(pán)。這時(shí)事務(wù)2請(qǐng)求C加上S鎖,因T1已在C上加了X鎖,事務(wù)2只能等待事務(wù)1釋放它。之后事務(wù)1因某種原因被撤銷,C恢復(fù)為原值100,并釋放C上的X鎖。事務(wù)2獲得C上的S鎖,讀C=100。這就避免了事務(wù)2臟讀數(shù)據(jù)。在2級(jí)封鎖協(xié)議中,由于讀完數(shù)據(jù)后即可釋放S鎖,所以它不能保證可重復(fù)讀。

24、3級(jí)封鎖協(xié)議3級(jí)封鎖協(xié)議的內(nèi)容是:1級(jí)封鎖協(xié)議加上事務(wù)T在讀取數(shù)據(jù)之前必須先對(duì)其加S鎖,直到事務(wù)結(jié)束才釋放。3級(jí)封鎖協(xié)議除防止丟失或覆蓋更新和不臟讀數(shù)據(jù)外,還進(jìn)一步防止了不可重復(fù)讀和幻想讀。例如下圖,使用3級(jí)封鎖協(xié)議解決了不可重復(fù)讀和幻像讀問(wèn)題。上圖中,事務(wù)1在讀A,B之前,先對(duì)A,B加S鎖,這樣其他事務(wù)只能再對(duì)A,B加S鎖,而不能加X(jué)鎖,即其他事務(wù)只能讀A,B,而不能修改它們。所以當(dāng)事務(wù)2為修改B而申請(qǐng)對(duì)B的X鎖時(shí)被拒絕,使其他無(wú)法執(zhí)行修改操作,只能等待事務(wù)1釋放B上的鎖。接著事務(wù)1為驗(yàn)算再讀A,B,這時(shí)讀出的B仍是100,求和結(jié)果仍為150,即可重復(fù)讀。上述三級(jí)協(xié)議的主要區(qū)別在于什么操作需

25、要申請(qǐng)封鎖以及何時(shí)釋放鎖(即持鎖時(shí)間)。三級(jí)封鎖協(xié)議可以總結(jié)為下表。(6) 保證并行調(diào)度可串行性的封鎖協(xié)議兩段封鎖協(xié)議可串行性是并行調(diào)度正確性的唯一準(zhǔn)則,兩段鎖(two-phase locking,簡(jiǎn)稱2PL)協(xié)議是為保證并行調(diào)度可串行性而提供的封鎖協(xié)議。兩段封鎖協(xié)議規(guī)定:在對(duì)任何數(shù)據(jù)進(jìn)行讀、寫(xiě)操作之前,事務(wù)首先要獲得對(duì)該數(shù)據(jù)的封鎖,而且在釋放一個(gè)封鎖之后,事務(wù)不再獲得任何其他封鎖。所謂“兩段”鎖的含義是,事務(wù)分為兩個(gè)階段,第一階段是獲得封鎖,也稱為擴(kuò)展階段,第二階段是釋放封鎖,也稱為收縮階段。例如,事務(wù)1的封鎖序列是:Slock A. Slock B Xlock C Unlock B Unl

26、ock A Unlock C;事務(wù)2的封鎖序列是:Slock A. Unlock A Slock B Xlock C Unlock C Unlock B;則事務(wù)1遵守兩段封鎖協(xié)議,而事務(wù)2不遵守兩段封鎖協(xié)議??梢宰C明,若并行執(zhí)行的所有事務(wù)均遵守兩段鎖協(xié)議,則對(duì)這些事務(wù)的所有并行調(diào)度策略都是可串行化的。因此我們得出如下結(jié)論:所有遵守兩段鎖協(xié)議的事務(wù),其并行的結(jié)果一定是正確的。需要說(shuō)明的是,事務(wù)遵守兩段鎖協(xié)議是可串行化調(diào)度的充分條件,而不是必要條件。即可串行化的調(diào)度中,不一定所有事務(wù)都必須符合兩段封鎖協(xié)議。例如,在下圖中,(a)和(b)都是可串行化的調(diào)度,但(a)遵守兩段鎖協(xié)議,(b)不遵守兩段鎖

27、協(xié)議。4. 死鎖和活鎖封鎖技術(shù)可以有效地解決并行操作的一致性問(wèn)題,但也帶來(lái)一些新的問(wèn)題,即死鎖和活鎖的問(wèn)題。(1) 活鎖如果事務(wù)T1封鎖了數(shù)據(jù)對(duì)象R后,事務(wù)T2也請(qǐng)求封鎖R,于是T2等待。接著T3也請(qǐng)求封鎖R。T1釋放R上的鎖后,系統(tǒng)首先批準(zhǔn)了T3的請(qǐng)求,T2只得繼續(xù)等待。接著T4也請(qǐng)求封鎖R,T3釋放R上的鎖后,系統(tǒng)又批準(zhǔn)了T4的請(qǐng)求,T2有可能就這樣永遠(yuǎn)等待下去。這就是活鎖的情形,如下圖所示。避免活鎖的簡(jiǎn)單方法是采用先來(lái)先服務(wù)的策略。當(dāng)多個(gè)事務(wù)請(qǐng)求封鎖同一數(shù)據(jù)對(duì)象時(shí),封鎖子系統(tǒng)按請(qǐng)求封鎖的先后次序?qū)@些事務(wù)排隊(duì),該數(shù)據(jù)對(duì)象上的鎖一旦釋放,首先批準(zhǔn)申請(qǐng)隊(duì)列中第一個(gè)事務(wù)獲得鎖。(2) 死鎖如果

28、事務(wù)T1封鎖了數(shù)據(jù)A,事務(wù)T2封鎖了數(shù)據(jù)B。之后T1又申請(qǐng)封鎖數(shù)據(jù)B,因T2已封鎖了B,于是T1等待T2釋放B上的鎖。接著T2又申請(qǐng)封鎖A,因T1已封鎖了A,T2也只能等待T1釋放A上的鎖。這樣就出現(xiàn)了T1在等待T2,而T2又在等待T1的局面,T1和T2兩個(gè)事務(wù)永遠(yuǎn)不能結(jié)束,形成死鎖。如下圖所示。死鎖問(wèn)題在操作系統(tǒng)和一般并行處理中已做了深入研究,但數(shù)據(jù)庫(kù)系統(tǒng)有其自己的特點(diǎn),操作系統(tǒng)中解決死鎖的方法并不一定合適數(shù)據(jù)庫(kù)系統(tǒng)。目前在數(shù)據(jù)庫(kù)中解決死鎖問(wèn)題主要有兩類方法,一類方法是采取一定措施來(lái)預(yù)防死鎖的發(fā)生,另一類方法是允許發(fā)生死鎖,采用一定手段定期診斷系統(tǒng)中有無(wú)死鎖,若有則解除之。 死鎖的預(yù)防在數(shù)據(jù)

29、庫(kù)系統(tǒng)中,產(chǎn)生死鎖的原因是兩個(gè)或多個(gè)事務(wù)都已封鎖了一些數(shù)據(jù)對(duì)象,然后又都請(qǐng)求對(duì)已為其他事務(wù)封鎖的數(shù)據(jù)對(duì)象加鎖,從而出現(xiàn)死鎖等待。防止死鎖的發(fā)生其實(shí)就是要破壞產(chǎn)生死鎖的條件。預(yù)防死鎖通常有兩種方法。 一次封鎖法一次封鎖法要求每個(gè)事務(wù)必須一次將所有要使用的數(shù)據(jù)全部加鎖,否則就不能繼續(xù)執(zhí)行。例如,在上圖的例子中,如果事務(wù)T1將數(shù)據(jù)對(duì)象A和B一次加鎖,T1就可以執(zhí)行下去,而T2等待。T1執(zhí)行完后釋放A,B上的鎖,T2繼續(xù)執(zhí)行。這樣就不會(huì)發(fā)生死鎖。一次封鎖法雖然可以有效地防止死鎖的發(fā)生,但也存在問(wèn)題。第一,一次就將以后要用到的全部數(shù)據(jù)加鎖,勢(shì)必?cái)U(kuò)大了封鎖的范圍,從而降低了系統(tǒng)的并發(fā)度。第二,數(shù)據(jù)庫(kù)中數(shù)據(jù)

30、是不斷變化的,原來(lái)不要求封鎖的數(shù)據(jù),在執(zhí)行過(guò)程中可能會(huì)變成封鎖對(duì)象,所以很難實(shí)現(xiàn)精確地確定每個(gè)事務(wù)所要封鎖的數(shù)據(jù)對(duì)象,只能采取擴(kuò)大封鎖范圍,將事務(wù)在執(zhí)行過(guò)程中可能要封鎖的數(shù)據(jù)對(duì)象全部加鎖,這就進(jìn)一步降低了并發(fā)度。 順序封鎖法順序封鎖法是預(yù)先對(duì)數(shù)據(jù)對(duì)象規(guī)定一個(gè)封鎖順序,所有事務(wù)都按這個(gè)順序執(zhí)行封鎖。在上例中,我們規(guī)定封鎖順是A,B,T1和T2都按此順序封鎖,即T2也必須先封鎖A。當(dāng)T2請(qǐng)求A的封鎖時(shí),由于T1已經(jīng)封鎖住A,T2就只能等待。T1釋放A,B上的鎖后,T2繼續(xù)運(yùn)行。這樣就不會(huì)發(fā)生死鎖。順序封鎖法同樣可以有效地防止死鎖,但也同樣存在問(wèn)題。第一,數(shù)據(jù)庫(kù)系統(tǒng)中可封鎖的數(shù)據(jù)對(duì)象及其眾多,并且隨

31、數(shù)據(jù)的插入、刪除等操作而不斷地變化,要維護(hù)這樣極多而且變化的資源的封鎖順序非常困難,成本很高。第二,事務(wù)的封鎖請(qǐng)求可以隨著事務(wù)的執(zhí)行而動(dòng)態(tài)地決定,很難事先確定每一個(gè)事務(wù)要封鎖哪些對(duì)象,因此也就很難按規(guī)定的順序取施加封鎖。例如,規(guī)定數(shù)據(jù)對(duì)象的封鎖順序?yàn)锳,B,C,D,E。事務(wù)T3起初要求封鎖數(shù)據(jù)對(duì)象B,C,E,但當(dāng)它封鎖B,C后,才發(fā)現(xiàn)還需要封鎖A,這樣就破壞了封鎖順序??梢?jiàn),在操作系統(tǒng)中廣為采用的預(yù)防死鎖的策略并不很適合數(shù)據(jù)庫(kù)的特點(diǎn),因此DBMS在解決死鎖的問(wèn)題上更普遍采用的是診斷并解除死鎖的方法。 死鎖的診斷與解除數(shù)據(jù)庫(kù)系統(tǒng)中診斷死鎖的方法與操作系統(tǒng)類似,即使用一個(gè)事務(wù)等待圖,它動(dòng)態(tài)地反映所

32、有事務(wù)的等待狀況。并發(fā)控制子系統(tǒng)周期性地(比如每隔1分鐘)檢測(cè)事務(wù)等待圖,如果發(fā)現(xiàn)圖中存在回路,則表示系統(tǒng)中出現(xiàn)了死鎖。關(guān)于診斷死鎖的詳細(xì)討論請(qǐng)參閱操作系統(tǒng)的有關(guān)書(shū)籍。DBMS的并發(fā)控制子系統(tǒng)一旦檢測(cè)到系統(tǒng)中存在死鎖,就要設(shè)法解除。通常采用的方法是選擇一個(gè)處理死鎖代價(jià)最小的事務(wù),將其撤銷,釋放此事務(wù)持有的所有的鎖,使其他事務(wù)能繼續(xù)運(yùn)行下去。二、 DM的并發(fā)控制(一) 事務(wù)隔離級(jí)事務(wù)的隔離級(jí)描述了給定事務(wù)的行為對(duì)其它并發(fā)執(zhí)行事務(wù)的暴露程度。 SQL-92共規(guī)定了四種隔離級(jí)別,通過(guò)選擇四個(gè)隔離級(jí)中的一個(gè),用戶能增加對(duì)其它未提交事務(wù)的暴露程度,獲得更高的并發(fā)度。隔離級(jí)別是一個(gè)事務(wù)必須與其它事務(wù)進(jìn)行隔

33、離的程度。SQL-92的四種隔離級(jí)別如下所示,DM支持所有這些隔離級(jí)別: (1)臟讀(READ UNCOMMITTED):事務(wù)隔離的最低級(jí)別,事務(wù)可能查詢到其它事務(wù)未提交的數(shù)據(jù), 僅可保證不讀取物理?yè)p壞的數(shù)據(jù))。(2)讀提交(READ COMMITTED):DM默認(rèn)級(jí)別,保證不讀臟數(shù)據(jù)。 (3)可重復(fù)讀(REPEATABLE READ):保證不可重復(fù)讀,但有可能讀入幻像數(shù)據(jù)。 (4)可串行化(SERIALIZABLE):事務(wù)隔離的最高級(jí)別,事務(wù)之間完全隔離。DM允許用戶改變未啟動(dòng)的事務(wù)的隔離級(jí)和讀寫(xiě)特性 ,而且設(shè)置的選項(xiàng)將一直對(duì)那個(gè)連接保持有效,直到顯式更改該選項(xiàng)為止。設(shè)置事務(wù)隔離級(jí)別雖然使程

34、序員承擔(dān)了某些完整性問(wèn)題所帶來(lái)的風(fēng)險(xiǎn),但可以換取對(duì)數(shù)據(jù)更大的并發(fā)訪問(wèn)權(quán)。與以前的隔離級(jí)別相比,每個(gè)隔離級(jí)別都提供了更大的隔離性,但這是通過(guò)在更長(zhǎng)的時(shí)間內(nèi)占用更多限制鎖換來(lái)的。DM還提供設(shè)置事務(wù)只讀屬性的語(yǔ)句,使用該語(yǔ)句后該事務(wù)只能做查詢操作,不能更新數(shù)據(jù)庫(kù)。需要注意的是,事務(wù)的隔離級(jí)別并不影響事務(wù)查看本身對(duì)數(shù)據(jù)的修改,也就是說(shuō),事務(wù)總可以查看自己對(duì)數(shù)據(jù)的修改。事務(wù)的隔離級(jí)別需要根據(jù)實(shí)際需要設(shè)定,較低的隔離級(jí)別可以增加并發(fā),但代價(jià)是降低數(shù)據(jù)的正確性。相反,較高的隔離級(jí)別可以確保數(shù)據(jù)的正確性,但可能對(duì)并發(fā)產(chǎn)生負(fù)面影響。應(yīng)用程序要求的隔離級(jí)別確定了DM使用的鎖定行為。 下表中列出四種隔離級(jí)別允許不同

35、類型的現(xiàn)象 注意:丟失或覆蓋更新在所有的標(biāo)準(zhǔn)SQL隔離級(jí)中都是禁止的。(二) 并發(fā)處理1. 數(shù)據(jù)鎖定機(jī)制DM用數(shù)據(jù)鎖定機(jī)制來(lái)解決并發(fā)問(wèn)題。它可以保證任何時(shí)候都可以有多個(gè)正在運(yùn)行的事務(wù),但是所有事務(wù)都在彼此完全隔離的環(huán)境中運(yùn)行。 DM的封鎖對(duì)象為表和元組。封鎖的實(shí)施有自動(dòng)和手動(dòng)兩種,即隱式上鎖和顯式上鎖。隱式封鎖動(dòng)作的封鎖根據(jù)事務(wù)的隔離級(jí)有所不同。同時(shí), DM提供給用戶4種手動(dòng)上鎖語(yǔ)句,用以適應(yīng)用戶定義的應(yīng)用系統(tǒng)。 一般而言, DM的隱式封鎖足以保證數(shù)據(jù)的一致性,但用戶可以根據(jù)自己的需要改變對(duì)表的封鎖。 DM提供給用戶四種表鎖:意向共享鎖(IS:INTENSIVE SHARE)、共享鎖(S:SH

36、ARE)、意向排它鎖(IX:INTENSIVE EXCLUSIVE)和排它鎖(X:EXCLUSIVE)。例如,在讀提交隔離級(jí)下,系統(tǒng)缺省的表鎖是 IS或IX ,在這兩種表鎖下,在訪問(wèn)元組前還需對(duì)元組進(jìn)行封鎖,為了提高系統(tǒng)的效率,用戶可以手動(dòng)對(duì)表進(jìn)行 X封鎖,這樣,就不需對(duì)訪問(wèn)元組封鎖。 封鎖機(jī)制要達(dá)到以下目的:(1)一致性:保證用戶正在查看時(shí),改變的數(shù)據(jù)并未從根本上發(fā)生變化。 (2)完整性:保證數(shù)據(jù)庫(kù)的基本結(jié)構(gòu)以正確的順序,準(zhǔn)確地反映對(duì)它們的所有改變。 一個(gè)“ 鎖定” 可以認(rèn)為是當(dāng)某一進(jìn)程需要防止其它進(jìn)程做某事時(shí)獲得的某種東西,當(dāng)該進(jìn)程不再關(guān)心此事時(shí)就 “釋放 ”此鎖定,通常一個(gè)鎖定是加在某個(gè)

37、 “資源 ”(某些客體,如表 )上的。 DM的內(nèi)部鎖定是自動(dòng)完成的。當(dāng)某一進(jìn)程要查看一個(gè)客體但不允許其他人修改它時(shí),就獲得一個(gè)共享方式的鎖定。當(dāng)某一進(jìn)程要修改一客體,并且防止任何其它進(jìn)程修改它時(shí),就獲得更新方式的鎖定。當(dāng)某一進(jìn)程要修改一客體,并且防止任何其它進(jìn)程修改它或以共享方式封鎖它時(shí),就獲得獨(dú)占方式的鎖定。2. 鎖定類型DM中的鎖有三種,表鎖、行鎖和鍵范圍鎖。 表鎖表鎖用來(lái)封鎖表對(duì)象,在對(duì)表進(jìn)行檢索和更新時(shí),DM會(huì)對(duì)表對(duì)象進(jìn)行封鎖,但是DM為用戶提供手動(dòng)的表鎖語(yǔ)句,用戶可以根據(jù)自己的需要改變對(duì)表的封鎖類型。表鎖的模式:意向共享鎖 IS,意向排它鎖 IX,共享鎖 S,排它鎖 X,共四種,其相

38、容矩陣可定義如下表。 行鎖行鎖封鎖元組,在存取元組和更新元組前, DM會(huì)對(duì)元組上行鎖,系統(tǒng)不提供手動(dòng)的行封鎖語(yǔ)句。行鎖有兩種模式:共享鎖(S)、排它鎖(X),其相容矩陣定義如下表。 鍵范圍鎖鍵范圍鎖用在可串行事務(wù)上,主要解決了幻像讀并發(fā)問(wèn)題。鍵范圍鎖覆蓋單個(gè)記錄以及記錄之間的范圍,可以防止對(duì)事務(wù)訪問(wèn)的記錄集進(jìn)行幻像插入或刪除。鍵范圍鎖僅用于在可串行隔離級(jí)別上操作的事務(wù)。 可串行性要求,如果任意一個(gè)查詢?cè)谝粋€(gè)事務(wù)中后面的某一時(shí)刻再次執(zhí)行,其所獲取的行集應(yīng)與該查詢?cè)谕皇聞?wù)中以前執(zhí)行時(shí)所獲得的行集相同。如果本查詢?cè)噲D提取的行不存在,則在試圖訪問(wèn)該行的事務(wù)完成之前,其它事務(wù)不能插入該行。如果允許另一個(gè)事務(wù)插入該行,則它將以幻像出現(xiàn)。 如果另一個(gè)事務(wù)試圖插入駐留在鎖定數(shù)據(jù)頁(yè)上的行,頁(yè)級(jí)鎖定可以防止添加幻像行,并維護(hù)可串行性。但是,如果該行要添加到未被第一個(gè)事務(wù)鎖定的數(shù)據(jù)頁(yè),應(yīng)設(shè)定鎖定機(jī)制防止添加該行。 鍵范圍鎖通過(guò)覆蓋索引行和索引行之間的范圍來(lái)工作(而不是鎖定整個(gè)基礎(chǔ)表的行)。因?yàn)榈诙€(gè)事務(wù)在該范圍內(nèi)進(jìn)行任何行插入、更新或刪除操作時(shí)均需要修

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論