版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第9章并發(fā)控制22023/2/6問題提出多用戶數(shù)據(jù)庫系統(tǒng)特征允許多個用戶同時使用的數(shù)據(jù)庫系統(tǒng)飛機(jī)定票數(shù)據(jù)庫系統(tǒng)銀行數(shù)據(jù)庫系統(tǒng)特點(diǎn):在同一時刻并發(fā)運(yùn)行的事務(wù)數(shù)可達(dá)數(shù)百個多事務(wù)執(zhí)行方式(1)事務(wù)串行執(zhí)行每個時刻只有一個事務(wù)運(yùn)行,其他事務(wù)必須等到這個事務(wù)結(jié)束以后方能運(yùn)行不能充分利用系統(tǒng)資源和數(shù)據(jù)庫資源32023/2/6問題提出多事務(wù)執(zhí)行方式(續(xù))(1)事務(wù)串行執(zhí)行(2)交叉并發(fā)方式interleavedconcurrency并行事務(wù)的并行操作輪流交叉運(yùn)行是單處理機(jī)系統(tǒng)中的并發(fā)方式,能夠減少處理機(jī)的空閑時間,提高系統(tǒng)的效率(3)同時并發(fā)方式simultaneousconcurrency多處理機(jī)系統(tǒng)中,每個處理機(jī)可以運(yùn)行一個事務(wù),多個處理機(jī)可以同時運(yùn)行多個事務(wù),實(shí)現(xiàn)多個事務(wù)真正的并行運(yùn)行最理想的并發(fā)方式受制于硬件環(huán)境、更復(fù)雜的機(jī)制42023/2/6第9章并發(fā)控制事務(wù)并發(fā)執(zhí)行帶來的問題可能會存取和存儲不正確的數(shù)據(jù),破壞事務(wù)的隔離性和數(shù)據(jù)庫的一致性DBMS必須提供并發(fā)控制機(jī)制9.1 并發(fā)事務(wù)運(yùn)行存在的異常問題9.2 并發(fā)調(diào)度的可串行性9.3 基于封鎖的并發(fā)控制技術(shù)9.4 多粒度封鎖9.5 基于時間戳協(xié)議的并發(fā)控制9.6 基于有效性確認(rèn)的并發(fā)控制9.7 插入與刪除操作對并發(fā)控制的影響9.8 SQLServer中的并發(fā)控制9.9 小結(jié)52023/2/6(回顧)事務(wù)特征事務(wù)的四個特性:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持續(xù)性(Durability),簡稱ACID特性1.原子性(Atomicity)事務(wù)是數(shù)據(jù)庫的邏輯工作單位,事務(wù)中包括的諸操作要么都做,要么都不做2.一致性(Consistency)事務(wù)執(zhí)行的結(jié)果必須是使數(shù)據(jù)庫從一個一致性狀態(tài)變到另一個一致性狀態(tài)一致性狀態(tài):數(shù)據(jù)庫中只包含成功事務(wù)提交的結(jié)果不一致狀態(tài):數(shù)據(jù)庫中包含失敗事務(wù)的結(jié)果62023/2/6(回顧)事務(wù)特征3.隔離性對并發(fā)執(zhí)行而言,一個事務(wù)的執(zhí)行不能被其他事務(wù)干擾4.持續(xù)性持續(xù)性也稱永久性(Permanence)一個事務(wù)一旦提交,它對數(shù)據(jù)庫中數(shù)據(jù)的改變就應(yīng)該是永久性的。接下來的其他操作或故障不應(yīng)該對其執(zhí)行結(jié)果有任何影響。事務(wù)并發(fā)執(zhí)行可能會存取和存儲不正確的數(shù)據(jù),破壞事務(wù)的隔離性和數(shù)據(jù)庫的一致性72023/2/69.1并發(fā)事務(wù)運(yùn)行存在的異常問題并發(fā)操作帶來的數(shù)據(jù)不一致性1.丟失更新(lostupdate)2.不可重復(fù)讀(non-repeatableread)3.讀“臟”數(shù)據(jù)(dirtyread)82023/2/61.丟失更新
讀R=100
R=R-1寫回R=99提交①讀R=100
②③R=R-1
寫回R=99
提交④T2T1以飛機(jī)定票系統(tǒng)為例,甲售票點(diǎn)事務(wù)T1和乙售票點(diǎn)事務(wù)T2同時讀取某航班的機(jī)票余額R=100;分別售出1張機(jī)票結(jié)果明明賣出兩張機(jī)票,數(shù)據(jù)庫中機(jī)票余額只減少1丟失更新是指事務(wù)1與事務(wù)2從數(shù)據(jù)庫中讀入同一數(shù)據(jù)并修改事務(wù)2的提交結(jié)果破壞了事務(wù)1提交的結(jié)果,導(dǎo)致事務(wù)1的修改被丟失。92023/2/62.不可重復(fù)讀不可重復(fù)讀是事務(wù)T1讀取數(shù)據(jù)后,T2對同一數(shù)據(jù)執(zhí)行更新操作,使T1再次讀取該數(shù)據(jù)時,得到與前一次不同的值。三類不可重復(fù)讀:事務(wù)1讀取某一數(shù)據(jù)后:T2對其做了修改,當(dāng)T1再次讀該數(shù)據(jù)時,得到與前一次不同的值
T2刪除了其中部分記錄,當(dāng)T1再次讀取數(shù)據(jù)時,某些記錄消失
T2插入了一些記錄,當(dāng)T1再次按相同條件讀數(shù)據(jù)時,多了一些記錄后兩種不可重復(fù)讀有時也稱為幻影現(xiàn)象(phantomrow)
讀B=100B←B*2寫回B=200
①
讀A=50
讀B=100
求和=150②
③讀A=50
讀B=200
求和=250(驗算不對)T2T1102023/2/63.讀“臟”數(shù)據(jù)事務(wù)1修改某一數(shù)據(jù),并將其寫回磁盤事務(wù)2讀取同一數(shù)據(jù)后,事務(wù)1由于某種原因被撤消,這時事務(wù)1已修改過的數(shù)據(jù)恢復(fù)原值事務(wù)2讀到的數(shù)據(jù)就與數(shù)據(jù)庫中的數(shù)據(jù)不一致,是不正確的數(shù)據(jù),又稱為“臟”數(shù)據(jù)。
讀C=200
①讀C=100C←C*2
寫回C②③ROLLBACKC恢復(fù)為100T2T1112023/2/69.1并發(fā)事務(wù)運(yùn)行存在的異常問題并發(fā)操作帶來的數(shù)據(jù)不一致性丟失更新(lostupdate)不可重復(fù)讀(non-repeatableread)讀“臟”數(shù)據(jù)(dirtyread)這種數(shù)據(jù)庫的不一致性是由并發(fā)操作引起的,主要原因是并發(fā)操作破壞了事務(wù)的隔離性并發(fā)控制機(jī)制要用正確的方式調(diào)度并發(fā)操作,使一個用戶事務(wù)的執(zhí)行不受其他事務(wù)的干擾,避免造成數(shù)據(jù)的不一致性保證事務(wù)的隔離性保證數(shù)據(jù)庫的一致性122023/2/6第9章并發(fā)控制9.1 并發(fā)事務(wù)運(yùn)行存在的異常問題9.2 并發(fā)調(diào)度的可串行性9.3 基于封鎖的并發(fā)控制技術(shù)9.4 多粒度封鎖9.5 基于時間戳協(xié)議的并發(fā)控制9.6 基于有效性確認(rèn)的并發(fā)控制9.7 插入與刪除操作對并發(fā)控制的影響9.8 SQLServer中的并發(fā)控制9.9 小結(jié)132023/2/69.2
并發(fā)調(diào)度的可串行性計算機(jī)系統(tǒng)對并行事務(wù)中并行操作的調(diào)度是隨機(jī)的,而不同的調(diào)度可能會產(chǎn)生不同的結(jié)果。將所有事務(wù)串行起來的調(diào)度策略是正確的調(diào)度策略。如果一個事務(wù)運(yùn)行過程中沒有其他事務(wù)在同時運(yùn)行,也就是說它沒有受到其他事務(wù)的干擾,那么就可以認(rèn)為該事務(wù)的運(yùn)行結(jié)果是正常的或者預(yù)想的以不同的順序串行執(zhí)行事務(wù)也有可能會產(chǎn)生不同的結(jié)果,但由于不會將數(shù)據(jù)庫置于不一致狀態(tài),所以都可以認(rèn)為是正確的。定義9.1多個事務(wù)的并發(fā)執(zhí)行是正確的,當(dāng)且僅當(dāng)并發(fā)執(zhí)行的結(jié)果與這些事務(wù)按某一串行順序執(zhí)行的結(jié)果相同,這種調(diào)度策略被稱為可串行化調(diào)度。可串行化是并發(fā)事務(wù)正確調(diào)度的準(zhǔn)則。142023/2/6可串行化調(diào)度可串行性是并行事務(wù)正確性的唯一準(zhǔn)則按這個準(zhǔn)則規(guī)定,一個給定的并發(fā)調(diào)度,當(dāng)且僅當(dāng)它是可串化的,才認(rèn)為是正確調(diào)度例:現(xiàn)在有兩個事務(wù),分別包含下列操作:事務(wù)1:讀B;A=B+1;寫回A;事務(wù)2:讀A;B=A+1;寫回B;假設(shè)A的初值為2,B的初值為2。對這兩個事務(wù)的不同調(diào)度策略串行執(zhí)行(a)串行調(diào)度策略、(b)串行調(diào)度策略交錯執(zhí)行(c)不可串行化的調(diào)度、(d)可串行化的調(diào)度152023/2/69.2.1 可串行化調(diào)度SlockBY=B=2UnlockBXlockAA=Y+1寫回A(=3)UnlockA
SlockAX=A=3UnlockAXlockBB=X+1寫回B(=4)UnlockB
T1T2(a)串行調(diào)度策略正確的調(diào)度162023/2/69.2.1 可串行化調(diào)度SlockBY=B=2UnlockBXlockAA=Y+1寫回A(=3)UnlockA
SlockAX=A=3UnlockAXlockBB=X+1寫回B(=4)UnlockB
T1T2(a)串行調(diào)度策略正確的調(diào)度
SlockBY=B=3UnlockBXlockAA=Y+1寫回A(=4)UnlockA
SlockAX=A=2UnlockAXlockBB=X+1寫回B(=3)UnlockB
T1T2(b)串行調(diào)度策略正確的調(diào)度172023/2/69.2.1 可串行化調(diào)度SlockBY=B=2UnlockBXlockAA=Y+1寫回A(=3)UnlockA
SlockAX=A=3UnlockAXlockBB=X+1寫回B(=4)UnlockB
T1T2(a)串行調(diào)度策略正確的調(diào)度
SlockBY=B=3UnlockBXlockAA=Y+1寫回A(=4)UnlockA
SlockAX=A=2UnlockAXlockBB=X+1寫回B(=3)UnlockB
T1T2(b)串行調(diào)度策略正確的調(diào)度SlockBY=B=2
UnlockB
XlockAA=Y+1寫回A(=3)
UnlockA
SlockAX=A=2
UnlockA
XlockBB=X+1寫回B(=3)
UnlockB
T1T2(c)不可串行化的調(diào)度錯誤的調(diào)度182023/2/6(d)可串行化的調(diào)度SlockBY=B=2UnlockBXlockA
A=Y+1寫回A(=3)UnlockA
SlockA
等待等待等待X=A=3UnlockAXlockBB=X+1寫回B(=4)UnlockB
T1T2由于其執(zhí)行結(jié)果與串行調(diào)度(a)的執(zhí)行結(jié)果相同,所以是正確的調(diào)度。192023/2/69.2.1
可串行化調(diào)度DBMS必須提供一定手段來保證調(diào)度是可串行化的,如何保證并發(fā)操作的調(diào)度是正確的?從理論上講,在某一事務(wù)執(zhí)行時禁止其他事務(wù)執(zhí)行的調(diào)度策略一定是可串行化的調(diào)度,這也是最簡單的調(diào)度策略,但這種方法實(shí)際上是不可行的,因為它不利于共享202023/2/69.2.2調(diào)度的沖突等價性沖突操作沖突操作是指不同的事務(wù)對同一個數(shù)據(jù)的讀寫操作和寫寫操作Ri(x)與Wj(x) /*事務(wù)Ti讀x,Tj寫x*/Wi(x)與Wj(x) /*事務(wù)Ti寫x,Tj寫x*/其他操作是不沖突操作不同事務(wù)的沖突操作和同一事務(wù)的兩個操作不能交換(Swap)定義9.2如果一個調(diào)度S能通過一系列非沖突操作執(zhí)行順序的交換變成調(diào)度S1,則稱調(diào)度S和S1
沖突等價。212023/2/69.2.2調(diào)度的沖突等價性【例9-3】證明調(diào)度S是否是可串行化調(diào)度。
S=R1(A)W1(A)R2(A)W2(A)R1(B)W1(B)R2(B)W2(B)把W2(A)與R1(B)W1(B)交換,得到:
R1(A)W1(A)R2(A)R1(B)W1(B)W2(A)R2(B)W2(B)222023/2/69.2.2調(diào)度的沖突等價性【例9-3】證明調(diào)度S是否是可串行化調(diào)度。
S=R1(A)W1(A)R2(A)W2(A)R1(B)W1(B)R2(B)W2(B)把W2(A)與R1(B)W1(B)交換,得到:
R1(A)W1(A)R2(A)R1(B)W1(B)W2(A)R2(B)W2(B)再把r2(A)與r1(B)w1(B)交換:
L=R1(A)W1(A)R1(B)W1(B)R2(A)W2(A)R2(B)W2(B)因為L等價于一個串行調(diào)度T1,T2所以調(diào)度S是可串行化的調(diào)度L和S是(沖突)等價的232023/2/69.2.3調(diào)度的狀態(tài)等價性定義9.4我們稱一個調(diào)度是狀態(tài)可串行的,如果它的狀態(tài)等價于一個串行調(diào)度。可串行化調(diào)度的充分條件一個調(diào)度S在保證沖突操作的次序不變的情況下,通過交換兩個事務(wù)不沖突操作的次序得到另一個調(diào)度S’,如果S’是串行的,稱調(diào)度S為沖突可串行化的調(diào)度242023/2/69.2.3調(diào)度的狀態(tài)等價性一個調(diào)度是沖突可串行化,一定是狀態(tài)可串行的(可串行化的調(diào)度)沖突可串行化調(diào)度是可串行化調(diào)度的充分條件,不是必要條件。還有不滿足沖突可串行化條件的可串行化調(diào)度[例]有3個事務(wù)
T1=W1(Y)W1(X),T2=W2(Y)W2(X),T3=W3(X)調(diào)度L1=W1(Y)W1(X)W2(Y)W2(X)
W3(X)是一個串行調(diào)度調(diào)度L2=W1(Y)W2(Y)W2(X)W1(X)W3(X)不滿足沖突可串行化因為每對操作都是沖突的,不能交換但是調(diào)度L2是可串行化的。因為L2執(zhí)行的結(jié)果與調(diào)度L1相同,Y的值都等于T2的值,X的值都等于T3的值252023/2/6第9章并發(fā)控制9.1 并發(fā)事務(wù)運(yùn)行存在的異常問題9.2 并發(fā)調(diào)度的可串行性9.3 基于封鎖的并發(fā)控制技術(shù)9.4 多粒度封鎖9.5 基于時間戳協(xié)議的并發(fā)控制9.6 基于有效性確認(rèn)的并發(fā)控制9.7 插入與刪除操作對并發(fā)控制的影響9.8 SQLServer中的并發(fā)控制9.9 小結(jié)262023/2/69.3
基于封鎖的并發(fā)控制技術(shù)并發(fā)控制的主要技術(shù)有封鎖(Locking)時間戳(Timestamp)樂觀控制法并發(fā)事務(wù)的可串行化技術(shù),實(shí)質(zhì)上遵循了一種約束:即當(dāng)一個事務(wù)存取某一個數(shù)據(jù)項時,不允許其它事務(wù)修改這一數(shù)據(jù)項。這就是封鎖技術(shù)(Locking)商用的DBMS一般都采用封鎖方法272023/2/69.3
基于封鎖的并發(fā)控制技術(shù)封鎖是實(shí)現(xiàn)并發(fā)控制的一個非常重要的技術(shù)事務(wù)T在對某個數(shù)據(jù)對象(如表、記錄等)操作之前,先向系統(tǒng)發(fā)出請求,對其加鎖加鎖后事務(wù)T就對該數(shù)據(jù)對象有了一定的控制,在事務(wù)T釋放它的鎖之前
其它的事務(wù)不能更新此數(shù)據(jù)對象。一個事務(wù)對某個數(shù)據(jù)對象加鎖后究竟擁有什么樣的控制由封鎖的類型決定。282023/2/69.3.1鎖確切的控制是由封鎖的類型決定的。共享鎖(Sharelock,簡記為S鎖,又稱為讀鎖)若事務(wù)T對數(shù)據(jù)對象A加上S鎖,則其它事務(wù)只能再對A加S鎖,而不能加X鎖,直到T釋放A上的S鎖保證其他事務(wù)可以獲得對象A的S鎖、讀取A,但在T釋放A上的S鎖之前不能對A做任何修改排它鎖(eXclusivelock,簡記為X鎖,又稱為寫鎖)若事務(wù)T對數(shù)據(jù)對象A加上X鎖,則只允許T讀取和修改A,其它任何事務(wù)都不能再對A加任何類型的鎖,直到T釋放A上的鎖292023/2/69.3.1鎖鎖的相容矩陣Y,相容的請求N,不相容的請求
T1T2XS-XNNYSNYY-YYY列表示事務(wù)T1已經(jīng)獲得的數(shù)據(jù)對象上的鎖的類型,其中橫線表示沒有加鎖。行表示事務(wù)T2對同一數(shù)據(jù)對象發(fā)出的封鎖請求T2的封鎖請求能否被滿足用矩陣中的Y和N表示Y表示事務(wù)T2的封鎖要求與T1已持有的鎖相容,封鎖請求可以滿足N表示T2的封鎖請求與T1已持有的鎖沖突,T2的請求被拒絕302023/2/69.3.2封鎖協(xié)議封鎖協(xié)議運(yùn)用封鎖方法時,對數(shù)據(jù)對象加鎖時需要約定一些規(guī)則何時申請封鎖持鎖時間何時釋放封鎖等312023/2/69.3.2封鎖協(xié)議1.一級封鎖協(xié)議事務(wù)T在修改數(shù)據(jù)A前必須先對其加X鎖,直到事務(wù)結(jié)束才釋放T1T2①
XlockA
獲得②
讀A=16
③A←A-1
寫回A=15CommitUnlockA④
⑤
XlockA等待等待等待等待獲得XlockA讀A=15A←A-1寫回A=14CommitUnlockA
符合一級封鎖協(xié)議沒有丟失修改
322023/2/61.一級封鎖協(xié)議
XlockB
獲得
讀B=100B←B*2
寫回B=200CommitUnlockB①讀A=50
讀B=100
求和=150②③讀A=50
讀B=200
求和=250(驗算不對)T2T1不可重復(fù)讀
讀A=15①
XlockA
獲得②
讀A=16
A←A-1
寫回A=15③
④RollbackUnlockAT2T1讀“臟”數(shù)據(jù)一級封鎖協(xié)議在讀數(shù)據(jù)時不加鎖,所以不能保證可重復(fù)讀和不讀“臟”數(shù)據(jù)。332023/2/62.二級封鎖協(xié)議二級封鎖協(xié)議規(guī)定:在一級封鎖協(xié)議基礎(chǔ)上,事務(wù)T在讀數(shù)據(jù)A之前必須先對其加S鎖,讀完后即可釋放S鎖增加二級封鎖協(xié)議的目的是防止讀“臟”數(shù)據(jù)。
T1T2①XlockC
讀C=100C←C*2
寫回C=200②
③ROLLBACK(C恢復(fù)為100)UnlockC④
⑤
SlockC等待等待等待等待獲得SlockC讀C=100UnlockC342023/2/62.二級封鎖協(xié)議二級封鎖協(xié)議并不能保證避免不可重復(fù)讀的問題。因為事務(wù)T在讀數(shù)據(jù)A之前加上的S鎖,讀完后即釋放了,以后再讀時有可能數(shù)據(jù)發(fā)生了變化。解決的方法是,加在數(shù)據(jù)A上的S鎖直到事務(wù)結(jié)束才釋放。
XlockB
獲得
讀B=100B←B*2
寫回B=200CommitUnlockB①SlockA讀A=50UnlockASlockB讀B=100UnlockB求和=150②③SlockA讀A=50UnlockASlockB讀B=200
求和=250(驗算不對)
T2T1352023/2/63.三級封鎖協(xié)議三級封鎖協(xié)議:在二級封鎖協(xié)議基礎(chǔ)上,某一事務(wù)施加的S鎖要保持到該事務(wù)結(jié)束時才釋放。T1T2
①
SlockA
讀A=50SlockB
讀B=100
求和=150②
③讀A=50
讀B=100
求和=150CommitUnlockAUnlockB④
⑤
XlockB等待等待等待等待等待等待等待等待獲得XlockB讀B=100B←B*2寫回B=200CommitUnlockB362023/2/69.3.3 活鎖封鎖技術(shù)可以有效地解決并行操作的一致性問題,但也帶來一些新的問題:死鎖,活鎖活鎖:在數(shù)據(jù)庫系統(tǒng)中活鎖是指某個事務(wù)由于請求封鎖,但總也得不到鎖而長時間處于等待狀態(tài)372023/2/69.3.3 活鎖如何避免活鎖采用先來先服務(wù)的策略:當(dāng)多個事務(wù)請求封鎖同一數(shù)據(jù)對象時,按請求封鎖的先后次序?qū)@些事務(wù)排隊該數(shù)據(jù)對象上的鎖一旦釋放,首先批準(zhǔn)申請隊列中第一個事務(wù)獲得鎖。382023/2/69.3.4死鎖死鎖是指在同時處于等待狀態(tài)的兩上或多個事務(wù)中相互封鎖了對方請求的資源,使得沒有任何一個事物可以獲得足夠的資源運(yùn)行完畢,而永遠(yuǎn)等待下去。解決死鎖的方法1.預(yù)防死鎖2.允許死鎖發(fā)生死鎖的診斷與解除Xlock
R1...XlockR2等待等待等待...XlockR2..XlockR1等待等待.T1T2392023/2/61.死鎖的預(yù)防產(chǎn)生死鎖的原因兩個或多個事務(wù)都已封鎖了一些數(shù)據(jù)對象,然后又都請求對已被其他事務(wù)封鎖的數(shù)據(jù)對象加鎖出現(xiàn)死等待。預(yù)防死鎖的發(fā)生就是要破壞產(chǎn)生死鎖的條件預(yù)防死鎖的方法一次封鎖法順序封鎖法事務(wù)重試法402023/2/6(1)一次封鎖法解決方法:將事務(wù)在執(zhí)行過程中可能要封鎖的數(shù)據(jù)對象全部加鎖,這就進(jìn)一步降低了并發(fā)度。一次封鎖法存在的問題將以后要用到的全部數(shù)據(jù)加鎖,勢必擴(kuò)大了封鎖的范圍,從而降低了系統(tǒng)的并發(fā)度數(shù)據(jù)庫中數(shù)據(jù)是不斷變化的,原來不要求封鎖的數(shù)據(jù),在執(zhí)行過程中可能會變成封鎖對象,所以很難事先精確地確定每個事務(wù)所要封鎖的數(shù)據(jù)對象412023/2/6(2)順序封鎖法順序封鎖法是預(yù)先對數(shù)據(jù)對象規(guī)定一個封鎖順序,所有事務(wù)都按這個順序?qū)嵭蟹怄i。順序封鎖法存在的問題數(shù)據(jù)庫系統(tǒng)中可封鎖的數(shù)據(jù)對象極其眾多,并且隨數(shù)據(jù)的插入、刪除等操作而不斷地變化,要維護(hù)這樣極多而且變化的資源的封鎖順序非常困難,成本很高維護(hù)成本高事務(wù)的封鎖請求可以隨著事務(wù)的執(zhí)行而動態(tài)地決定,很難事先確定每一個事務(wù)要封鎖哪些對象,因此也就很難按規(guī)定的順序去施加封鎖。難于實(shí)現(xiàn)例:規(guī)定數(shù)據(jù)對象的封鎖順序為A,B,C,D,E。事務(wù)T3起初要求封鎖數(shù)據(jù)對象B,C,E,但當(dāng)它封鎖了B,C后,才發(fā)現(xiàn)還需要封鎖A,這樣就破壞了封鎖順序.422023/2/61.死鎖的預(yù)防(3)事務(wù)重試法使用搶占機(jī)制和事務(wù)回滾當(dāng)事務(wù)T2申請的鎖已被事務(wù)T1占有時,根據(jù)事務(wù)開始的先后,授予T1的鎖可能通過回滾事務(wù)T1被搶占將T1釋放的鎖授予T2,而事務(wù)T1回滾后自動重試。結(jié)論在操作系統(tǒng)中廣為采用的預(yù)防死鎖的策略并不很適合數(shù)據(jù)庫的特點(diǎn)DBMS在解決死鎖的問題上更普遍采用的是診斷并解除死鎖的方法432023/2/62.死鎖的檢測與恢復(fù)允許死鎖發(fā)生解除死鎖由DBMS的并發(fā)控制子系統(tǒng)定期檢測系統(tǒng)中是否存在死鎖一旦檢測到死鎖,就要設(shè)法解除選擇一個處理死鎖代價最小的事務(wù),將其撤消,釋放此事務(wù)持有的所有的鎖,使其它事務(wù)能繼續(xù)運(yùn)行下去。被撤銷的事務(wù)需要回滾442023/2/62.死鎖的檢測與恢復(fù)(1)超時法如果一個事務(wù)的等待時間超過了規(guī)定的時限,就認(rèn)為發(fā)生了死鎖優(yōu)點(diǎn)實(shí)現(xiàn)簡單缺點(diǎn)有可能誤判死鎖時限若設(shè)置得太長,死鎖發(fā)生后不能及時發(fā)現(xiàn)452023/2/62.死鎖的檢測與恢復(fù)(2)事務(wù)等待圖法用事務(wù)等待圖動態(tài)反映所有事務(wù)的等待情況事務(wù)等待圖是一個有向圖G=(V,U)V為結(jié)點(diǎn)的集合,每個結(jié)點(diǎn)表示正運(yùn)行的事務(wù)U為邊的集合,每條邊表示事務(wù)等待的情況若V1等待V2,則V1,V2之間畫一條有向邊,從V1指向V2并發(fā)控制子系統(tǒng)周期性地(比如每隔1min)檢測事務(wù)等待圖,如果發(fā)現(xiàn)圖中存在回路,則表示系統(tǒng)中出現(xiàn)了死鎖。462023/2/62.死鎖的檢測與恢復(fù)圖(a)中,事務(wù)T1等待T2,T2等待T1,產(chǎn)生了死鎖圖(b)中,事務(wù)T1等待T2,T2等待T3,T3等待T4,T4又等待T1,產(chǎn)生了死鎖圖(b)中,事務(wù)T3可能還等待T2,在大回路中又有小的回路事務(wù)等待圖472023/2/62.死鎖的檢測與恢復(fù)死鎖的恢復(fù)解除死鎖的方法是回滾一個或多個相關(guān)事務(wù)選擇一個處理死鎖代價最小的事務(wù),將其撤消釋放此事務(wù)持有的所有的鎖,使其它事務(wù)能繼續(xù)運(yùn)行下去482023/2/69.3.5 兩階段封鎖協(xié)議兩階段封鎖協(xié)議(Two-PhaseLocking,簡稱2PL)是最常用的一種封鎖協(xié)議理論上可以證明使用兩段封鎖協(xié)議產(chǎn)生的是可串行化調(diào)度兩階段封鎖協(xié)議指所有事務(wù)必須分兩個階段對數(shù)據(jù)項加鎖和解鎖1.在對任何數(shù)據(jù)進(jìn)行讀、寫操作之前,事務(wù)首先要獲得對該數(shù)據(jù)的封鎖2.在釋放一個封鎖之后,事務(wù)不再獲得任何其他封鎖兩階段封鎖協(xié)議是保證并發(fā)調(diào)度可串行性的封鎖協(xié)議492023/2/69.3.5 兩階段封鎖協(xié)議“兩階段”鎖的含義:事務(wù)分為兩個階段第一階段是獲得封鎖,也稱為擴(kuò)展階段。在這階段,事務(wù)可以申請獲得任何數(shù)據(jù)項上的任何類型的鎖,但是不能釋放任何鎖第二階段是釋放封鎖,也稱為收縮階段。在這階段,事務(wù)可以釋放任何數(shù)據(jù)項上的任何類型的鎖,但是不能再申請任何鎖。例:事務(wù)1遵守兩階段封鎖協(xié)議,事務(wù)2不遵守兩階段封鎖協(xié)議SlockA...SlockB...XlockC...
UnlockB...UnlockA...UnlockCSlockA...UnlockA...SlockB...XlockC...UnlockC...UnlockB502023/2/69.3.5 兩階段封鎖協(xié)議并行執(zhí)行的所有事務(wù)均遵守兩階段封鎖協(xié)議,則對這些事務(wù)的所有并行調(diào)度策略都是可串行化的。
所有遵守兩階段封鎖協(xié)議的事務(wù),其并行執(zhí)行的結(jié)果一定是正確的事務(wù)遵守兩段鎖協(xié)議是可串行化調(diào)度的充分條件,而不是必要條件可串行化的調(diào)度中,不一定所有事務(wù)都必須符合兩階段封鎖協(xié)議。512023/2/6T1SlockB讀B=2Y=BXlockA
A=Y+1寫回A=3UnlockBUnlockA
T2
SlockA
等待等待等待等待SlockA讀A=3Y=AXlockBB=Y+1寫回B=4UnlockBUnlockA
(a)遵守兩段鎖協(xié)議
522023/2/6T1SlockB讀B=2Y=BXlockA
A=Y+1寫回A=3UnlockBUnlockA
T2
SlockA
等待等待等待等待SlockA讀A=3Y=AXlockBB=Y+1寫回B=4UnlockBUnlockA
T1SlockB讀B=2Y=BUnlockBXlockA
A=Y+1寫回A=3UnlockA
T2
SlockA等待等待等待等待SlockA讀A=3X=AUnlockAXlockBB=X+1寫回B=4UnlockB
(a)遵守兩段鎖協(xié)議
(b)不遵守兩段鎖協(xié)議
532023/2/6T1SlockB讀B=2Y=BXlockA
A=Y+1寫回A=3UnlockBUnlockA
T2
SlockA
等待等待等待等待SlockA讀A=3Y=AXlockBB=Y+1寫回B=4UnlockBUnlockA
T1SlockB讀B=2Y=BUnlockBXlockA
A=Y+1寫回A=3UnlockA
T2
SlockA等待等待等待等待SlockA讀A=3X=AUnlockAXlockBB=X+1寫回B=4UnlockB
(a)遵守兩段鎖協(xié)議
(b)不遵守兩段鎖協(xié)議
T1SlockB讀B=2Y=BUnlockBXlockAA=Y+1寫回A=3UnlockAT2
SlockA讀A=2X=AUnlockAXlockB等待XlockBB=X+1寫回B=3UnlockB
(c)不遵守兩段鎖協(xié)議542023/2/69.3.5 兩階段封鎖協(xié)議兩階段封鎖協(xié)議與防止死鎖的一次封鎖法一次封鎖法要求每個事務(wù)必須一次將所有要使用的數(shù)據(jù)全部加鎖,否則就不能繼續(xù)執(zhí)行,因此一次封鎖法遵守兩段鎖協(xié)議但是兩階段封鎖協(xié)議并不要求事務(wù)必須一次將所有要使用的數(shù)據(jù)全部加鎖,因此遵守兩階段封鎖協(xié)議的事務(wù)可能發(fā)生死鎖T1SlockB讀B=2
XlockA等待等待T2
SlockA讀A=2
XlockB等待遵守兩階段封鎖協(xié)議的事務(wù)發(fā)生死鎖552023/2/69.3.6 鎖表鎖的請求、授予和解除是由數(shù)據(jù)庫系統(tǒng)的鎖管理器(LockManager)完成針對鎖請求消息返回授予鎖消息或者發(fā)生死鎖時要求事務(wù)回滾的消息解除鎖消息只需要一個確認(rèn)應(yīng)答鎖管理器為目前已加鎖的數(shù)據(jù)項維護(hù)一個記錄鏈表,每個鎖請求為一個記錄,按請求的到達(dá)順序排序這個表稱為鎖表(LockTable)。562023/2/69.3.6 鎖表鎖表將數(shù)據(jù)庫元素和封鎖信息聯(lián)系在一起封鎖請求處理假設(shè)事務(wù)T請求A上的鎖如果沒有A的鎖表項,則表明A無鎖,因此相應(yīng)的表項被創(chuàng)建。如果存在A的鎖表項,則依據(jù)它決定封鎖請求解鎖處理572023/2/6第9章并發(fā)控制9.1 并發(fā)事務(wù)運(yùn)行存在的異常問題9.2 并發(fā)調(diào)度的可串行性9.3 基于封鎖的并發(fā)控制技術(shù)9.4 多粒度封鎖9.8 SQLServer中的并發(fā)控制9.9 小結(jié)582023/2/69.4
多粒度封鎖一、什么是封鎖粒度封鎖對象的大小稱為封鎖粒度。封鎖對象可以是邏輯單元(屬性至數(shù)據(jù)庫),也可以是物理單元(數(shù)據(jù)頁)。例:在關(guān)系數(shù)據(jù)庫中,封鎖對象:邏輯單元:屬性值、屬性值集合、元組、關(guān)系、索引項、整個索引、整個數(shù)據(jù)庫等物理單元:頁(數(shù)據(jù)頁或索引頁)、物理記錄等多粒度封鎖(multiplegranularitylocking):在一個系統(tǒng)中同時支持多種封鎖粒度供不同的事務(wù)選擇592023/2/69.4
多粒度封鎖二、選擇封鎖粒度的原則封鎖的粒度越大,小,系統(tǒng)被封鎖的對象少,多,并發(fā)度小,高,系統(tǒng)開銷小,大,選擇封鎖粒度考慮封鎖機(jī)構(gòu)和并發(fā)度兩個因素,對系統(tǒng)開銷與并發(fā)度進(jìn)行權(quán)衡需要處理多個關(guān)系的大量元組的用戶事務(wù):以數(shù)據(jù)庫為封鎖單位;需要處理大量元組的用戶事務(wù):以關(guān)系為封鎖單元只處理少量元組的用戶事務(wù):以元組為封鎖單位602023/2/69.4
多粒度封鎖多粒度樹以樹形結(jié)構(gòu)來表示多級封鎖粒度根結(jié)點(diǎn)是整個數(shù)據(jù)庫,表示最大的數(shù)據(jù)粒度葉結(jié)點(diǎn)表示最小的數(shù)據(jù)粒度例:三級粒度樹。根結(jié)點(diǎn)為數(shù)據(jù)庫,數(shù)據(jù)庫的子結(jié)點(diǎn)為關(guān)系,關(guān)系的子結(jié)點(diǎn)為元組。數(shù)據(jù)庫關(guān)系Rn關(guān)系R1元組元組元組元組………………612023/2/61.多粒度封鎖多粒度封鎖協(xié)議允許多粒度樹中的每個結(jié)點(diǎn)被獨(dú)立地加鎖對一個結(jié)點(diǎn)加鎖意味著這個結(jié)點(diǎn)的所有后裔結(jié)點(diǎn)也被加以同樣類型的鎖在多粒度封鎖中一個數(shù)據(jù)對象可能以兩種方式封鎖,封鎖的效果是一樣的顯式封鎖:直接加到數(shù)據(jù)對象上的封鎖隱式封鎖:由于其上級結(jié)點(diǎn)加鎖而使該數(shù)據(jù)對象加上了鎖622023/2/61.多粒度封鎖系統(tǒng)檢查封鎖沖突時要檢查顯式封鎖、還要檢查隱式封鎖對某個數(shù)據(jù)對象加鎖時系統(tǒng)檢查的內(nèi)容該數(shù)據(jù)對象:有無顯式封鎖與之沖突所有上級結(jié)點(diǎn)檢查本事務(wù)的顯式封鎖是否與該數(shù)據(jù)對象上的隱式封鎖沖突:(由上級結(jié)點(diǎn)封鎖造成的)所有下級結(jié)點(diǎn)看上面的顯式封鎖是否與本事務(wù)的隱式封鎖(將加到下級結(jié)點(diǎn)的封鎖)沖突。632023/2/61.多粒度封鎖例如事務(wù)T要對關(guān)系R1加X鎖系統(tǒng)必須搜索其上級結(jié)點(diǎn)數(shù)據(jù)庫、關(guān)系R1還要搜索R1的下級結(jié)點(diǎn),即R1中的每一個元組如果其中某一個數(shù)據(jù)對象已經(jīng)加了不相容鎖,則T必須等待數(shù)據(jù)庫關(guān)系Rn關(guān)系R1元組元組元組元組………………642023/2/62.意向鎖引進(jìn)意向鎖(intentionlock)目的提高對某個數(shù)據(jù)對象加鎖時系統(tǒng)的檢查效率什么是意向鎖對任一結(jié)點(diǎn)加基本鎖,必須先對它的上層結(jié)點(diǎn)加意向鎖如果對一個結(jié)點(diǎn)加意向鎖,則說明該結(jié)點(diǎn)的下層結(jié)點(diǎn)正在被加鎖例:對任一元組r加鎖,先對關(guān)系R加意向鎖事務(wù)T要對關(guān)系R加X鎖,系統(tǒng)只要檢查根結(jié)點(diǎn)數(shù)據(jù)庫和關(guān)系R是否已加了不相容的鎖,不需要搜索和檢查R中的每一個元組是否加了X鎖652023/2/6常用意向鎖意向共享鎖(IntentShareLock,簡稱IS鎖)如果對一個數(shù)據(jù)對象加IS鎖,表示它的后裔結(jié)點(diǎn)擬(意向)加S鎖。例:要對某個元組加S鎖,則要先對關(guān)系和數(shù)據(jù)庫加IS鎖意向排它鎖(IntentExclusiveLock,簡稱IX鎖)如果對一個數(shù)據(jù)對象加IX鎖,表示它的后裔結(jié)點(diǎn)擬(意向)加X鎖。例:要對某個元組加X鎖,先要對關(guān)系和數(shù)據(jù)庫加IX鎖共享意向排它鎖(ShareIntentExclusiveLock,簡稱SIX鎖)如果對一個數(shù)據(jù)對象加SIX鎖,表示對它加S鎖,再加IX鎖,即SIX=S+IX。例:對某個表加SIX鎖,則表示該事務(wù)要讀整個表(所以要對該表加S鎖),同時會更新個別元組(所以要對該表加IX鎖)662023/2/62.意向鎖意向鎖的相容矩陣
T1T2SXISIXSIX-
SYNYNNYXNNNNNYISYNYYYYIXNNYYNYSIXNNYNNY-YYYYYY
鎖的強(qiáng)度鎖的強(qiáng)度是指它對其他鎖的排斥程度一個事務(wù)在申請封鎖時以強(qiáng)鎖代替弱鎖是安全的,反之則不然SIXXSIX
-IS鎖的強(qiáng)度的偏序關(guān)系672023/2/62.意向鎖具有意向鎖的多粒度封鎖方法申請封鎖時應(yīng)該按自上而下的次序進(jìn)行;釋放封鎖時則應(yīng)該按自下而上的次序進(jìn)行例如:事務(wù)T1要對關(guān)系R1加S鎖要首先對數(shù)據(jù)庫加IS鎖檢查數(shù)據(jù)庫和R1是否已加了不相容的鎖(X或IX)不再需要搜索和檢查R1中的元組是否加了不相容的鎖(X鎖)數(shù)據(jù)庫關(guān)系Rn關(guān)系R1元組元組元組元組………………682023/2/62.意向鎖具有意向鎖的多粒度封鎖方法提高了系統(tǒng)的并發(fā)度減少了加鎖和解鎖的開銷在實(shí)際的數(shù)據(jù)庫管理系統(tǒng)產(chǎn)品中得到廣泛應(yīng)用692023/2/6第9章并發(fā)控制9.1 并發(fā)事務(wù)運(yùn)行存在的異常問題9.2 并發(fā)調(diào)度的可串行性9.3 基于封鎖的并發(fā)控制技術(shù)9.4 多粒度封鎖9.8 SQLServer中的并發(fā)控制9.9 小結(jié)702023/2/69.8SQLServer中的并發(fā)控制SQLServer支持事務(wù)處理以管理多個事務(wù)事務(wù)在遇到COMMITTRANSACTION之前,不會對數(shù)據(jù)庫造成永久性的改變。事務(wù)在遇到ROLLBACKTRANSACTION語句時,可以撤銷它所作的改變SQLServer在事務(wù)執(zhí)行期間動態(tài)設(shè)置和調(diào)整適當(dāng)?shù)逆i定級別,也可以手動控制如何使用鎖SQLServer中有兩種事務(wù)隱性事務(wù)顯式事務(wù)(或稱為用戶定義事務(wù))提交的事務(wù)不能撤銷或回滾712023/2/6事務(wù)恢復(fù)和檢查點(diǎn)事務(wù)恢復(fù)SQLServe可以在發(fā)生故障時利用日志自動恢復(fù)數(shù)據(jù)使用事務(wù)日志重作所有已提交的事務(wù),回滾任何未提交的事務(wù)初始時,在數(shù)據(jù)緩存中和磁盤上的頁是相同的當(dāng)事務(wù)提交時,改變數(shù)據(jù)緩存內(nèi)的頁當(dāng)緩存滿時,改變過的頁寫入磁盤當(dāng)?shù)竭_(dá)檢查點(diǎn)時,緩存寫入磁盤。磁盤數(shù)據(jù)再次與緩存數(shù)據(jù)保持一致事務(wù)提交后,對數(shù)據(jù)庫的修改是否立即記錄到磁盤上?不是。事務(wù)提交后,只改變數(shù)據(jù)緩存的內(nèi)容,到達(dá)檢查點(diǎn)時才寫入磁盤;722023/2/6事務(wù)恢復(fù)和檢查點(diǎn)為何對這五個事務(wù)分別采取這些動作?事務(wù)1在檢查點(diǎn)之前已經(jīng)提交了,所以已經(jīng)反映在數(shù)據(jù)庫中;事務(wù)2和4在檢查點(diǎn)之后提交,所以它們必須從日志中重作;事務(wù)3和5尚未提交,所以SQLServer回滾它們事務(wù)恢復(fù)需要的動作無檢查點(diǎn)系統(tǒng)故障12345重作回滾重作回滾732023/2/6使用事務(wù)的考慮事項使用事務(wù)的指導(dǎo)方針事務(wù)應(yīng)盡可能短,并避免嵌套事務(wù)為了盡量減少事務(wù)所花費(fèi)的時間,小心使用特定的Transact-SQL語句在事務(wù)期間不應(yīng)該等待用戶輸入。用戶輸入應(yīng)該在事務(wù)開始前進(jìn)行INSERT、UPDATE和DELETE應(yīng)該是事務(wù)中的主要語句,且應(yīng)該盡可能少地改變數(shù)據(jù)行若可能的話,在瀏覽數(shù)據(jù)之前不要開始事務(wù)。事務(wù)應(yīng)該在初步數(shù)據(jù)分析結(jié)束后開始在事務(wù)中盡量減少對數(shù)據(jù)的訪問。這可以減少鎖定表的數(shù)目,減少數(shù)據(jù)爭用742023/2/6顯式和隱性事務(wù)若需要在事務(wù)中包含多條語句,必須將語句組用BEGINTRAN和COMMITTRAN(或ROLLBACKTRAN)包裝起來。包含多條語句的事務(wù)稱為顯式事務(wù)默認(rèn)情況下,SQLServer將每一條語句視為獨(dú)立的,并在執(zhí)行之后立即提交,每條數(shù)據(jù)修改語句單獨(dú)稱為隱性事務(wù)為了配置SQLServer隱性事務(wù)模式,可使用SETIMPLICIT_TRANSACTIONON,或使用sp_configure‘useroptions’,2打開全局選項752023/2/6SQLServer的鎖定SQLServer可以鎖定以下項目類型項目描述RID行標(biāo)識符。用于單獨(dú)鎖定表中的一行鍵索引中的行鎖。用于保護(hù)可串行事務(wù)中的鍵范圍頁8KB的數(shù)據(jù)頁或索引頁擴(kuò)展盤區(qū)相鄰的八個數(shù)據(jù)頁或索引頁構(gòu)成的一組,在空間分配中使用表包括所有數(shù)據(jù)和索引在內(nèi)的整個表數(shù)據(jù)庫整個數(shù)據(jù)庫,在數(shù)據(jù)庫的還原中使用762023/2/6鎖的類型SQLServer鎖的類型:基本鎖和特殊情況鎖基本鎖:包括共享鎖和排它鎖讀操作獲得共享鎖,寫操作獲得排它鎖共享鎖:用于不更改或不更新數(shù)據(jù)的操作(只讀操作),如SELECT語句排它鎖:用于數(shù)據(jù)修改操作,例如INSERT、UPDATE或DELETE特殊情況鎖意向鎖、更新鎖、架構(gòu)鎖、大容量更新鎖可使用sp_lock命令查看鎖的信息772023/2/6鎖的類型意向鎖:SQLServer內(nèi)部使用意向鎖,以使鎖定沖突減至最少意向鎖是為了減少鎖定沖突而設(shè)的,它建立了鎖的層次結(jié)構(gòu),使其他事物不能在所有包括鎖的更高層次上獲得鎖;意向鎖包括意向共享(IS)、意向排他(IX)和意向排他共享(SIX)。它并不是單獨(dú)的鎖模式,而是對其他鎖起限定作用;意向鎖的設(shè)定目的:由于SQLServer可以在不同粒度級別上獲得鎖,需要一個標(biāo)識資源的一部分已經(jīng)被鎖定的機(jī)制;782023/2/6鎖的類型更新鎖:用于可更新的資源中,防止當(dāng)多個會話在讀取、鎖定及隨后可能進(jìn)行的資源更新時發(fā)生常見形式的死鎖更新鎖是共享鎖和排他鎖的混合,能提高并發(fā)度。一個資源上面只能有一個更新鎖,其他共享鎖可以和更新鎖同時存在。但如果事務(wù)要修改數(shù)據(jù),則將共享鎖升級為排他鎖,這時候其他的共享鎖不能使用;在未升級成排他鎖之前,更新鎖和共享鎖是兼容的;792023/2/6鎖的類型架構(gòu)鎖:在執(zhí)行依賴于表架構(gòu)的操作時使用,確保表或索引在被另外的會話引用時不被刪除或更改架構(gòu)。架構(gòu)鎖包括架構(gòu)穩(wěn)定性(Sch-S)鎖和架構(gòu)修改(Sch-M)鎖大容量更新鎖:向表中大容量復(fù)制數(shù)據(jù)并指定了TABLOCK提示時使用大容量更新鎖允許進(jìn)程將數(shù)據(jù)并發(fā)地大容量復(fù)制到同一表,同時防止其他不進(jìn)行大容量復(fù)制數(shù)據(jù)的進(jìn)程訪問該表。當(dāng)將數(shù)據(jù)大容量復(fù)制到表,且指定了TABLOCK提示或者使用sp_tableoption設(shè)置了tablelockonbulk表選項時,將使用大容量更新鎖。802023/2/6事務(wù)的隔離級別盡管可串行性對于事務(wù)確保數(shù)據(jù)庫中的數(shù)據(jù)在所有時間內(nèi)的正確性相當(dāng)重要,然而許多事務(wù)并不總是要求完全的隔離事務(wù)準(zhǔn)備接受不一致數(shù)據(jù)的級別稱為隔離級別。隔離級別是一個事務(wù)必須與其它事務(wù)進(jìn)行隔離的程度較低的隔離級別可以增加并發(fā),但代價是降低數(shù)據(jù)的正確性。較高的隔離級別可以確保數(shù)據(jù)的正確性,但可能對并發(fā)產(chǎn)生負(fù)面影響。應(yīng)用程序要求的隔離級別確定了SQLServer使用的鎖定行為。812023/2/6事務(wù)的隔離級別SQL-92定義了下列四種隔離級別,SQLServer支持所有這些隔離級別:未提交讀(事務(wù)隔離的最低級別,僅可保證不讀取物理損壞的數(shù)據(jù))提交讀(SQLServer默認(rèn)級別)可重復(fù)讀可串行讀(事務(wù)隔離的最高級別,事務(wù)之間完全隔離)如果事務(wù)在可串行讀隔離級別上運(yùn)行,則可以保證任何并發(fā)重疊事務(wù)均是串行的822023/2/6事務(wù)的隔離級別SQL-92定義了下列四種隔離級別,SQLServer支持所有這些隔離級別:未提交讀(事務(wù)隔離的最低級別,僅可保證不讀取物理損壞的數(shù)據(jù))提交讀(SQLServer默認(rèn)級別)可重復(fù)讀可串行讀(事務(wù)隔離的最高級別,事務(wù)之間完全隔離)選項描述READCOMMITTED提交讀。在讀取時使用共享鎖,不允許臟讀READUNCOMMITTED未提交讀。不使用共享鎖,忽略排他鎖,允許臟讀REPEATABLEREAD可重復(fù)讀。不可能發(fā)生臟讀和不可重復(fù)讀取,保持讀鎖直到事務(wù)結(jié)束SERIALIZ
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年電焊機(jī)電纜項目可行性研究報告
- 2025正規(guī)商品買賣合同(版)
- 甲狀腺檢測系統(tǒng)行業(yè)市場發(fā)展及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 2025年中國包裝容器專用干燥機(jī)械行業(yè)市場前瞻與投資戰(zhàn)略規(guī)劃分析報告
- 2025年硅酸鎂項目可行性研究報告
- 2025-2025年中國扁鋼市場發(fā)展策略及投資潛力可行性預(yù)測報告
- 2024-2025年中國海外代購市場供需格局及未來發(fā)展趨勢報告
- 2024-2030年中國維生素C顆粒行業(yè)市場深度研究及發(fā)展趨勢預(yù)測報告
- 汽車橫向穩(wěn)定桿投資建設(shè)項目立項報告
- 如何設(shè)計排爆車項目可行性研究報告評審方案2025年立項詳細(xì)標(biāo)準(zhǔn)及
- 楚雄師范學(xué)院-18級-葡萄酒專業(yè)-葡萄酒工藝學(xué)復(fù)習(xí)題及答案
- 高速公路機(jī)電工程標(biāo)準(zhǔn)化施工管理質(zhì)量控制
- 助產(chǎn)士的述職報告
- 醫(yī)保繳費(fèi)問題排查整改報告
- 2024年黑龍江高中學(xué)業(yè)水平合格性考試數(shù)學(xué)試卷試題(含答案詳解)
- 2024年度醫(yī)院財務(wù)部述職報告課件
- 浙江省杭州市余杭區(qū)2023-2024學(xué)年五年級上學(xué)期1月期末道德與法治試題
- 工程管理培訓(xùn)教案
- agv無人運(yùn)輸車維修保養(yǎng)合同
- 2023-2024學(xué)年二年級數(shù)學(xué)上冊期末樂考非紙筆測試題(一)蘇教版
- 學(xué)生信息技術(shù)應(yīng)用實(shí)踐
評論
0/150
提交評論