




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第9章 并發控制問題提出多用戶數據庫系統特征允許多個用戶同時使用的數據庫系統飛機定票數據庫系統銀行數據庫系統 特點:在同一時刻并發運行的事務數可達數百個 多事務執行方式(1)事務串行執行每個時刻只有一個事務運行,其他事務必須等到這個事務結束以后方能運行不能充分利用系統資源和數據庫資源2022/7/182問題提出多事務執行方式(續)(1)事務串行執行(2)交叉并發方式interleaved concurrency并行事務的并行操作輪流交叉運行是單處理機系統中的并發方式,能夠減少處理機的空閑時間,提高系統的效率(3)同時并發方式simultaneous concurrency多處理機系統中,每個處
2、理機可以運行一個事務,多個處理機可以同時運行多個事務,實現多個事務真正的并行運行最理想的并發方式受制于硬件環境、更復雜的機制2022/7/183第9章 并發控制事務并發執行帶來的問題可能會存取和存儲不正確的數據,破壞事務的隔離性和數據庫的一致性DBMS必須提供并發控制機制9.1并發事務運行存在的異常問題9.2并發調度的可串行性9.3基于封鎖的并發控制技術9.4多粒度封鎖9.5基于時間戳協議的并發控制9.6基于有效性確認的并發控制9.7插入與刪除操作對并發控制的影響9.8SQL Server中的并發控制9.9小結2022/7/184(回顧) 事務特征事務的四個特性:原子性(Atomicity)、
3、一致性(Consistency)、隔離性(Isolation)、持續性(Durability),簡稱ACID特性1. 原子性(Atomicity)事務是數據庫的邏輯工作單位,事務中包括的諸操作要么都做,要么都不做2. 一致性(Consistency)事務執行的結果必須是使數據庫從一個一致性狀態變到另一個一致性狀態一致性狀態:數據庫中只包含成功事務提交的結果不一致狀態:數據庫中包含失敗事務的結果2022/7/185(回顧) 事務特征3. 隔離性對并發執行而言, 一個事務的執行不能被其他事務干擾4. 持續性持續性也稱永久性(Permanence)一個事務一旦提交,它對數據庫中數據的改變就應該是永久
4、性的。接下來的其他操作或故障不應該對其執行結果有任何影響。事務并發執行可能會存取和存儲不正確的數據,破壞事務的隔離性和數據庫的一致性2022/7/1869.1 并發事務運行存在的異常問題并發操作帶來的數據不一致性1. 丟失更新(lost update)2. 不可重復讀(non-repeatable read)3. 讀“臟”數據(dirty read)2022/7/1871. 丟失更新讀R=100R=R-1寫回R=99提交 讀R=100 R=R-1 寫回R=99提交T2T1以飛機定票系統為例, 甲售票點事務T1和乙售票點事務T2同時讀取某航班的機票余額R=100 ;分別售出1張機票結果明明賣出兩
5、張機票,數據庫中機票余額只減少1 丟失更新是指事務1與事務2從數據庫中讀入同一數據并修改事務2的提交結果破壞了事務1提交的結果,導致事務1的修改被丟失。2022/7/1882. 不可重復讀不可重復讀是事務T1讀取數據后,T2對同一數據執行更新操作,使T1再次讀取該數據時,得到與前一次不同的值。 三類不可重復讀: 事務1讀取某一數據后: T2對其做了修改,當T1再次讀該數據時,得到與前一次不同的值 T2刪除了其中部分記錄,當T1再次讀取數據時,某些記錄消失 T2插入了一些記錄,當T1再次按相同條件讀數據時, 多了一些記錄 后兩種不可重復讀有時也稱為幻影現象(phantom row)讀B=100
6、BB*2寫回B=200 讀A=50 讀B=100 求和=150 讀A=50 讀B=200 求和=250 (驗算不對) T2T12022/7/1893. 讀“臟”數據事務1修改某一數據,并將其寫回磁盤事務2讀取同一數據后,事務1由于某種原因被撤消,這時事務1已修改過的數據恢復原值事務2讀到的數據就與數據庫中的數據不一致,是不正確的數據,又稱為“臟”數據。讀C=200 讀C=100 CC*2 寫回C ROLLBACK C恢復為100T2T12022/7/18109.1 并發事務運行存在的異常問題并發操作帶來的數據不一致性丟失更新(lost update)不可重復讀(non-repeatable r
7、ead)讀“臟”數據(dirty read)這種數據庫的不一致性是由并發操作引起的,主要原因是并發操作破壞了事務的隔離性并發控制機制要用正確的方式調度并發操作,使一個用戶事務的執行不受其他事務的干擾,避免造成數據的不一致性 保證事務的隔離性保證數據庫的一致性2022/7/1811第9章 并發控制9.1并發事務運行存在的異常問題9.2并發調度的可串行性9.3基于封鎖的并發控制技術9.4多粒度封鎖9.5基于時間戳協議的并發控制9.6基于有效性確認的并發控制9.7插入與刪除操作對并發控制的影響9.8SQL Server中的并發控制9.9小結2022/7/18129.2 并發調度的可串行性計算機系統對
8、并行事務中并行操作的調度是隨機的,而不同的調度可能會產生不同的結果。將所有事務串行起來的調度策略是正確的調度策略。如果一個事務運行過程中沒有其他事務在同時運行,也就是說它沒有受到其他事務的干擾,那么就可以認為該事務的運行結果是正常的或者預想的以不同的順序串行執行事務也有可能會產生不同的結果,但由于不會將數據庫置于不一致狀態,所以都可以認為是正確的。定義9.1 多個事務的并發執行是正確的,當且僅當并發執行的結果與這些事務按某一串行順序執行的結果相同,這種調度策略被稱為可串行化調度。可串行化是并發事務正確調度的準則 。2022/7/1813可串行化調度可串行性是并行事務正確性的唯一準則按這個準則規
9、定,一個給定的并發調度,當且僅當它是可串化的,才認為是正確調度例:現在有兩個事務,分別包含下列操作: 事務1:讀B;A=B+1;寫回A; 事務2:讀A;B=A+1;寫回B; 假設A的初值為2,B的初值為2。對這兩個事務的不同調度策略串行執行(a)串行調度策略、 (b)串行調度策略交錯執行(c)不可串行化的調度、 (d)可串行化的調度2022/7/18149.2.1可串行化調度Slock BY=B=2Unlock BXlock AA=Y+1寫回A(=3)Unlock A Slock AX=A=3Unlock AXlock BB=X+1寫回B(=4)Unlock B T1T2(a) 串行調度策略正
10、確的調度2022/7/18159.2.1可串行化調度Slock BY=B=2Unlock BXlock AA=Y+1寫回A(=3)Unlock A Slock AX=A=3Unlock AXlock BB=X+1寫回B(=4)Unlock B T1T2(a) 串行調度策略正確的調度Slock BY=B=3Unlock BXlock AA=Y+1寫回A(=4)Unlock A SlockA X=A=2Unlock AXlock BB=X+1寫回B(=3)Unlock BT1T2(b) 串行調度策略正確的調度2022/7/18169.2.1可串行化調度Slock BY=B=2Unlock BXlo
11、ck AA=Y+1寫回A(=3)Unlock A Slock AX=A=3Unlock AXlock BB=X+1寫回B(=4)Unlock B T1T2(a) 串行調度策略正確的調度Slock BY=B=3Unlock BXlock AA=Y+1寫回A(=4)Unlock A SlockA X=A=2Unlock AXlock BB=X+1寫回B(=3)Unlock BT1T2(b) 串行調度策略正確的調度Slock BY=B=2Unlock BXlock AA=Y+1寫回A(=3)Unlock A Slock AX=A=2Unlock AXlock BB=X+1寫回B(=3)Unlock
12、B T1T2(c) 不可串行化的調度錯誤的調度2022/7/1817(d) 可串行化的調度Slock BY=B=2Unlock BXlock AA=Y+1寫回A(=3)Unlock ASlock A 等待 等待 等待X=A=3Unlock AXlock BB=X+1寫回B(=4)Unlock B T1T2由于其執行結果與串行調度(a)的執行結果相同,所以是正確的調度。2022/7/18189.2.1 可串行化調度DBMS必須提供一定手段來保證調度是可串行化的,如何保證并發操作的調度是正確的?從理論上講,在某一事務執行時禁止其他事務執行的調度策略一定是可串行化的調度,這也是最簡單的調度策略,但這
13、種方法實際上是不可行的,因為它不利于共享2022/7/18199.2.2 調度的沖突等價性沖突操作沖突操作是指不同的事務對同一個數據的讀寫操作和寫寫操作Ri(x)與Wj(x) /* 事務Ti讀x,Tj寫x*/Wi(x)與Wj(x) /* 事務Ti寫x,Tj寫x*/其他操作是不沖突操作不同事務的沖突操作和同一事務的兩個操作不能交換(Swap) 定義9.2 如果一個調度S能通過一系列非沖突操作執行順序的交換變成調度S1,則稱調度S和S1 沖突等價。 2022/7/18209.2.2 調度的沖突等價性【例 9-3】證明調度S是否是可串行化調度。 S=R1(A)W1(A)R2(A)W2(A)R1(B)
14、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)2022/7/18219.2.2 調度的沖突等價性【例 9-3】證明調度S是否是可串行化調度。 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)因為
15、L等價于一個串行調度T1,T2所以調度S是可串行化的調度定義9.4 我們稱一個調度是狀態可串行的,如果它的狀態等價于一個串行調度。L和S是(沖突)等價的 2022/7/18229.2.3 調度的狀態等價性可串行化調度的充分條件一個調度S在保證沖突操作的次序不變的情況下, 通過交換兩個事務不沖突操作的次序得到另一個調度S , 如果S是串行的, 稱調度S為沖突可串行化的調度一個調度是沖突可串行化,一定是狀態可串行的(可串行化的調度)沖突可串行化調度是可串行化調度的充分條件,不是必要條件還有不滿足沖突可串行化條件的可串行化調度2022/7/18239.2.3 調度的狀態等價性例有3個事務 T1=W1
16、(Y)W1(X),T2=W2(Y)W2(X),T3=W3(X)調度L1=W1(Y)W1(X)W2(Y)W2(X) W3(X)是一個串行調度。調度L2=W1(Y)W2(Y)W2(X)W1(X)W3(X)不滿足沖突可串行化因為每對操作都是沖突的,不能交換但是調度L2是可串行化的因為L2執行的結果與調度L1相同,Y的值都等于T2的值,X的值都等于T3的值 2022/7/1824第9章 并發控制9.1并發事務運行存在的異常問題9.2并發調度的可串行性9.3基于封鎖的并發控制技術9.4多粒度封鎖9.5基于時間戳協議的并發控制9.6基于有效性確認的并發控制9.7插入與刪除操作對并發控制的影響9.8SQL
17、Server中的并發控制9.9小結2022/7/18259.3 基于封鎖的并發控制技術并發控制的主要技術有封鎖(Locking)時間戳(Timestamp)樂觀控制法并發事務的可串行化技術,實質上遵循了一種約束:即當一個事務存取某一個數據項時,不允許其它事務修改這一數據項。這就是封鎖技術(Locking)商用的DBMS一般都采用封鎖方法2022/7/18269.3 基于封鎖的并發控制技術封鎖是實現并發控制的一個非常重要的技術事務T在對某個數據對象(如表、記錄等)操作之前,先向系統發出請求,對其加鎖加鎖后事務T就對該數據對象有了一定的控制,在事務T釋放它的鎖之前 其它的事務不能更新此數據對象。一
18、個事務對某個數據對象加鎖后究竟擁有什么樣的控制由封鎖的類型決定。2022/7/18279.3.1 鎖確切的控制是由封鎖的類型決定的。共享鎖(Share lock,簡記為S鎖,又稱為讀鎖) 若事務T對數據對象A加上S鎖,則其它事務只能再對A加S鎖,而不能加X鎖,直到T釋放A上的S鎖保證其他事務可以讀A,但在T釋放A上的S鎖之前不能對A做任何修改 排它鎖(eXclusive lock,簡記為X鎖,又稱為寫鎖)若事務T對數據對象A加上X鎖,則只允許T讀取和修改A,其它任何事務都不能再對A加任何類型的鎖,直到T釋放A上的鎖2022/7/18289.3.1 鎖鎖的相容矩陣Y,相容的請求N,不相容的請求
19、T1 T2XS-XNNYSNYY-YYY列表示事務T1已經獲得的數據對象上的鎖的類型,其中橫線表示沒有加鎖。行表示事務T2對同一數據對象發出的封鎖請求T2的封鎖請求能否被滿足用矩陣中的Y和N表示Y表示事務T2的封鎖要求與T1已持有的鎖相容,封鎖請求可以滿足N表示T2的封鎖請求與T1已持有的鎖沖突,T2的請求被拒絕2022/7/18299.3.2 封鎖協議封鎖協議運用封鎖方法時,對數據對象加鎖時需要約定一些規則 何時申請封鎖持鎖時間何時釋放封鎖等2022/7/18309.3.2 封鎖協議1一級封鎖協議事務T在修改數據A前必須先對其加X鎖,直到事務結束才釋放 T1T2 Xlock A 獲得 讀A=
20、16AA-1 寫回A=15 Commit Unlock AXlock A等待等待等待等待獲得Xlock A讀A=15AA-1寫回A=14CommitUnlock A 符合一級封鎖協議 沒有丟失修改 2022/7/18311一級封鎖協議 Xlock B 獲得 讀B=100 BB*2 寫回B=200 Commit Unlock B讀A=50 讀B=100 求和=150讀A=50 讀B=200 求和=250 (驗算不對) T2T1不可重復讀讀A=15 Xlock A 獲得 讀A=16 AA-1 寫回A=15 RollbackUnlock AT2T1讀“臟”數據一級封鎖協議在讀數據時不加鎖,所以不能保
21、證可重復讀和不讀“臟”數據。2022/7/18322二級封鎖協議二級封鎖協議規定:在一級封鎖協議基礎上,事務T在讀數據A之前必須先對其加S鎖,讀完后即可釋放S鎖 增加二級封鎖協議的目的是防止讀“臟”數據。 T1T2 Xlock C 讀C= 100 CC*2 寫回C=200 ROLLBACK (C恢復為100) Unlock C Slock C等待等待等待等待獲得Slock C讀C=100Unlock C2022/7/18332二級封鎖協議二級封鎖協議并不能保證避免不可重復讀的問題。因為事務T在讀數據A之前加上的S鎖,讀完后即釋放了,以后再讀時有可能數據發生了變化。 解決的方法是,加在數據A上的
22、S鎖直到事務結束才釋放。 Xlock B 獲得 讀B=100 BB*2 寫回B=200 Commit Unlock B Slock A 讀A=50 Unlock A Slock B 讀B=100 Unlock B 求和=150 Slock A 讀A=50 Unlock A Slock B 讀B=200 求和=250 (驗算不對) T2T12022/7/18343三級封鎖協議三級封鎖協議:在二級封鎖協議基礎上,某一事務施加的S鎖要保持到該事務結束時才釋放。 T1T2 Slock A 讀A=50 Slock B 讀B=100 求和=150 讀A=50 讀B=100 求和=150 Commit Un
23、lock A Unlock B Xlock B等待等待等待 等待等待等待等待等待獲得Xlock B讀B=100BB*2寫回B=200CommitUnlock B 2022/7/18359.3.3活鎖封鎖技術可以有效地解決并行操作的一致性問題,但也帶來一些新的問題:死鎖,活鎖活鎖:在數據庫系統中活鎖是指某個事務由于請求封鎖,但總也得不到鎖而長時間處于等待狀態2022/7/18369.3.3活鎖如何避免活鎖采用先來先服務的策略:當多個事務請求封鎖同一數據對象時,按請求封鎖的先后次序對這些事務排隊該數據對象上的鎖一旦釋放,首先批準申請隊列中第一個事務獲得鎖。2022/7/18379.3.4 死鎖死鎖
24、是指在同時處于等待狀態的兩上或多個事務中相互封鎖了對方請求的資源,使得沒有任何一個事物可以獲得足夠的資源運行完畢,而永遠等待下去。解決死鎖的方法1. 預防死鎖2. 允許死鎖發生死鎖的診斷與解除Xlock R1.Xlock R2等待等待等待.Xlock R2.Xlock R1等待等待.T1 T2 2022/7/18381. 死鎖的預防產生死鎖的原因兩個或多個事務都已封鎖了一些數據對象,然后又都請求對已被其他事務封鎖的數據對象加鎖出現死等待。預防死鎖的發生就是要破壞產生死鎖的條件預防死鎖的方法 一次封鎖法 順序封鎖法事務重試法 2022/7/1839(1)一次封鎖法解決方法:將事務在執行過程中可能
25、要封鎖的數據對象全部加鎖,這就進一步降低了并發度。一次封鎖法存在的問題將以后要用到的全部數據加鎖,勢必擴大了封鎖的范圍,從而降低了系統的并發度數據庫中數據是不斷變化的,原來不要求封鎖的數據,在執行過程中可能會變成封鎖對象,所以很難事先精確地確定每個事務所要封鎖的數據對象2022/7/1840(2)順序封鎖法順序封鎖法是預先對數據對象規定一個封鎖順序,所有事務都按這個順序實行封鎖。順序封鎖法存在的問題數據庫系統中可封鎖的數據對象極其眾多,并且隨數據的插入、刪除等操作而不斷地變化,要維護這樣極多而且變化的資源的封鎖順序非常困難,成本很高 維護成本高事務的封鎖請求可以隨著事務的執行而動態地決定,很難
26、事先確定每一個事務要封鎖哪些對象,因此也就很難按規定的順序去施加封鎖。難于實現 例:規定數據對象的封鎖順序為A,B,C,D,E。事務T3起初要求封鎖數據對象B,C,E,但當它封鎖了B,C后,才發現還需要封鎖A,這樣就破壞了封鎖順序.2022/7/18411. 死鎖的預防(3) 事務重試法使用搶占機制和事務回滾 當事務T2申請的鎖已被事務T1占有時,根據事務開始的先后,授予T1的鎖可能通過回滾事務T1被搶占將T1釋放的鎖授予T2,而事務T1回滾后自動重試。 結論在操作系統中廣為采用的預防死鎖的策略并不很適合數據庫的特點DBMS在解決死鎖的問題上更普遍采用的是診斷并解除死鎖的方法2022/7/18
27、422死鎖的檢測與恢復允許死鎖發生解除死鎖由DBMS的并發控制子系統定期檢測系統中是否存在死鎖一旦檢測到死鎖,就要設法解除選擇一個處理死鎖代價最小的事務,將其撤消,釋放此事務持有的所有的鎖,使其它事務能繼續運行下去。被撤銷的事務需要回滾2022/7/18432死鎖的檢測與恢復(1)超時法如果一個事務的等待時間超過了規定的時限,就認為發生了死鎖優點實現簡單缺點有可能誤判死鎖時限若設置得太長,死鎖發生后不能及時發現2022/7/18442死鎖的檢測與恢復(2)事務等待圖法用事務等待圖動態反映所有事務的等待情況事務等待圖是一個有向圖G=(V,U)V為結點的集合,每個結點表示正運行的事務U為邊的集合,
28、每條邊表示事務等待的情況若V1等待V2,則V1,V2之間畫一條有向邊,從V1指向V2并發控制子系統周期性地(比如每隔1 min)檢測事務等待圖,如果發現圖中存在回路,則表示系統中出現了死鎖。2022/7/18452死鎖的檢測與恢復圖(a)中,事務T1等待T2,T2等待T1,產生了死鎖圖(b)中,事務T1等待T2,T2等待T3,T3等待T4,T4又等待T1,產生了死鎖 圖(b)中,事務T3可能還等待T2,在大回路中又有小的回路 事務等待圖2022/7/18462死鎖的檢測與恢復死鎖的恢復 解除死鎖的方法是回滾一個或多個相關事務 選擇一個處理死鎖代價最小的事務,將其撤消釋放此事務持有的所有的鎖,使
29、其它事務能繼續運行下去2022/7/18479.3.5兩階段封鎖協議兩階段封鎖協議(Two-Phase Locking,簡稱2PL)是最常用的一種封鎖協議理論上可以證明使用兩段封鎖協議產生的是可串行化調度兩階段封鎖協議指所有事務必須分兩個階段對數據項加鎖和解鎖1. 在對任何數據進行讀、寫操作之前,事務首先要獲得對該數據的封鎖2. 在釋放一個封鎖之后,事務不再獲得任何其他封鎖兩階段封鎖協議是保證并發調度可串行性的封鎖協議2022/7/18489.3.5兩階段封鎖協議“兩階段”鎖的含義:事務分為兩個階段第一階段是獲得封鎖,也稱為擴展階段。在這階段,事務可以申請獲得任何數據項上的任何類型的鎖,但是不
30、能釋放任何鎖第二階段是釋放封鎖,也稱為收縮階段。在這階段,事務可以釋放任何數據項上的任何類型的鎖,但是不能再申請任何鎖。例:事務1遵守兩階段封鎖協議,事務2不遵守兩階段封鎖協議Slock A . Slock B . Xlock C . Unlock B . Unlock A . Unlock CSlock A . Unlock A . Slock B . Xlock C . Unlock C . Unlock B2022/7/18499.3.5兩階段封鎖協議并行執行的所有事務均遵守兩階段封鎖協議,則對這些事務的所有并行調度策略都是可串行化的。所有遵守兩階段封鎖協議的事務,其并行執行的結果一定是
31、正確的事務遵守兩段鎖協議是可串行化調度的充分條件,而不是必要條件可串行化的調度中,不一定所有事務都必須符合兩階段封鎖協議。2022/7/1850T1Slock B讀B=2Y=BXlock AA=Y+1寫回A=3Unlock BUnlock AT2Slock A 等待 等待 等待 等待Slock A讀A=3Y=A Xlock BB=Y+1寫回B=4Unlock BUnlock A (a) 遵守兩段鎖協議 2022/7/1851T1Slock B讀B=2Y=BXlock AA=Y+1寫回A=3Unlock BUnlock AT2Slock A 等待 等待 等待 等待Slock A讀A=3Y=A X
32、lock BB=Y+1寫回B=4Unlock BUnlock AT1Slock B讀B=2Y=BUnlock BXlock AA=Y+1寫回A=3Unlock AT2Slock A等待等待等待等待Slock A讀A=3X=AUnlock AXlock BB=X+1寫回B=4Unlock B (a) 遵守兩段鎖協議 (b) 不遵守兩段鎖協議 2022/7/1852T1Slock B讀B=2Y=BXlock AA=Y+1寫回A=3Unlock BUnlock AT2Slock A 等待 等待 等待 等待Slock A讀A=3Y=A Xlock BB=Y+1寫回B=4Unlock BUnlock A
33、T1Slock B讀B=2Y=BUnlock BXlock AA=Y+1寫回A=3Unlock AT2Slock A等待等待等待等待Slock A讀A=3X=AUnlock AXlock BB=X+1寫回B=4Unlock B (a) 遵守兩段鎖協議 (b) 不遵守兩段鎖協議 T1Slock B讀B=2Y=BUnlock BXlock AA=Y+1寫回A=3Unlock AT2Slock A讀A=2X=AUnlock AXlock B等待Xlock BB=X+1寫回B=3Unlock B(c) 不遵守兩段鎖協議 2022/7/18539.3.5兩階段封鎖協議兩階段封鎖協議與防止死鎖的一次封鎖法
34、一次封鎖法要求每個事務必須一次將所有要使用的數據全部加鎖,否則就不能繼續執行,因此一次封鎖法遵守兩段鎖協議但是兩階段封鎖協議并不要求事務必須一次將所有要使用的數據全部加鎖,因此遵守兩階段封鎖協議的事務可能發生死鎖T1Slock B讀B=2Xlock A等待等待T2Slock A讀A=2Xlock A等待遵守兩階段封鎖協議的事務發生死鎖2022/7/18549.3.6鎖表鎖的請求、授予和解除是由數據庫系統的鎖管理器(Lock Manager) 完成針對鎖請求消息返回授予鎖消息或者發生死鎖時要求事務回滾的消息 解除鎖消息只需要一個確認應答 鎖管理器為目前已加鎖的數據項維護一個記錄鏈表,每個鎖請求為
35、一個記錄,按請求的到達順序排序這個表稱為鎖表(Lock Table)。 2022/7/18559.3.6鎖表鎖表將數據庫元素 和封鎖信息聯系在 一起封鎖請求處理假設事務T請求A上的鎖如果沒有A的鎖表項,則表明A無鎖,因此相應的表項被創建。如果存在A的鎖表項,則依據它決定封鎖請求 解鎖處理2022/7/1856第9章 并發控制9.1并發事務運行存在的異常問題9.2并發調度的可串行性9.3基于封鎖的并發控制技術9.4多粒度封鎖9.8SQL Server中的并發控制9.9小結2022/7/18579.4 多粒度封鎖一、什么是封鎖粒度封鎖對象的大小稱為封鎖粒度。封鎖對象可以是邏輯單元(屬性至數據庫),
36、也可以是物理單元(數據頁)。例:在關系數據庫中,封鎖對象:邏輯單元: 屬性值、屬性值集合、元組、關系、索引項、整個索引、整個數據庫等物理單元:頁(數據頁或索引頁)、物理記錄等多粒度封鎖(multiple granularity locking):在一個系統中同時支持多種封鎖粒度供不同的事務選擇2022/7/18589.4 多粒度封鎖二、選擇封鎖粒度的原則封鎖的粒度越 大,小,系統被封鎖的對象 少,多,并發度 小,高,系統開銷 小,大,選擇封鎖粒度考慮封鎖機構和并發度兩個因素,對系統開銷與并發度進行權衡需要處理多個關系的大量元組的用戶事務:以數據庫為封鎖單位;需要處理大量元組的用戶事務:以關系為
37、封鎖單元只處理少量元組的用戶事務:以元組為封鎖單位2022/7/18599.4 多粒度封鎖多粒度樹以樹形結構來表示多級封鎖粒度根結點是整個數據庫,表示最大的數據粒度葉結點表示最小的數據粒度例:三級粒度樹。根結點為數據庫,數據庫的子結點為關系,關系的子結點為元組。數據庫關系Rn關系R1元組元組元組元組2022/7/18601. 多粒度封鎖多粒度封鎖協議允許多粒度樹中的每個結點被獨立地加鎖對一個結點加鎖意味著這個結點的所有后裔結點也被加以同樣類型的鎖在多粒度封鎖中一個數據對象可能以兩種方式封鎖,封鎖的效果是一樣的顯式封鎖: 直接加到數據對象上的封鎖隱式封鎖: 由于其上級結點加鎖而使該數據對象加上了
38、鎖2022/7/18611. 多粒度封鎖系統檢查封鎖沖突時要檢查顯式封鎖、還要檢查隱式封鎖對某個數據對象加鎖時系統檢查的內容該數據對象:有無顯式封鎖與之沖突 所有上級結點檢查本事務的顯式封鎖是否與該數據對象上的隱式封鎖沖突:(由上級結點封鎖造成的)所有下級結點看上面的顯式封鎖是否與本事務的隱式封鎖(將加到下級結點的封鎖)沖突。2022/7/18621. 多粒度封鎖例如事務T要對關系R1加X鎖系統必須搜索其上級結點數據庫、關系R1還要搜索R1的下級結點,即R1中的每一個元組如果其中某一個數據對象已經加了不相容鎖,則T必須等待 數據庫關系Rn關系R1元組元組元組元組2022/7/18632. 意向
39、鎖引進意向鎖(intention lock)目的提高對某個數據對象加鎖時系統的檢查效率什么是意向鎖對任一結點加基本鎖,必須先對它的上層結點加意向鎖如果對一個結點加意向鎖,則說明該結點的下層結點正在被加鎖例:對任一元組 r 加鎖,先對關系R加意向鎖 事務T要對關系R加X鎖, 系統只要檢查根結點數據庫和關系R是否已加了不相容的鎖,不需要搜索和檢查R中的每一個元組是否加了X鎖2022/7/1864常用意向鎖意向共享鎖(Intent Share Lock,簡稱IS鎖)如果對一個數據對象加IS鎖,表示它的后裔結點擬(意向)加S鎖。例:要對某個元組加S鎖,則要先對關系和數據庫加IS鎖意向排它鎖(Inten
40、t Exclusive Lock,簡稱IX鎖)如果對一個數據對象加IX鎖,表示它的后裔結點擬(意向)加X鎖。例:要對某個元組加X鎖,先要對關系和數據庫加IX鎖共享意向排它鎖(Share Intent Exclusive Lock,簡稱SIX鎖)如果對一個數據對象加SIX鎖,表示對它加S鎖,再加IX鎖,即SIX = S + IX。例:對某個表加SIX鎖,則表示該事務要讀整個表(所以要對該表加S鎖),同時會更新個別元組(所以要對該表加IX鎖)2022/7/18652. 意向鎖 意向鎖的相容矩陣 T1 T2 S X IS IX SIX - S Y N Y N N Y X N N N N N Y IS
41、 Y N Y Y Y Y IX N N Y Y N Y SIX N N Y N N Y - Y Y Y Y Y Y 鎖的強度鎖的強度是指它對其他鎖的排斥程度一個事務在申請封鎖時以強鎖代替弱鎖是安全的,反之則不然SIXXSIX -IS鎖的強度的偏序關系2022/7/18662. 意向鎖具有意向鎖的多粒度封鎖方法申請封鎖時應該按自上而下的次序進行;釋放封鎖時則應該按自下而上的次序進行 例如:事務T1要對關系R1加S鎖要首先對數據庫加IS鎖檢查數據庫和R1是否已加了不相容的鎖(X或IX)不再需要搜索和檢查R1中的元組是否加了不相容的鎖(X鎖) 數據庫關系Rn關系R1元組元組元組元組2022/7/18
42、672. 意向鎖具有意向鎖的多粒度封鎖方法提高了系統的并發度減少了加鎖和解鎖的開銷在實際的數據庫管理系統產品中得到廣泛應用 2022/7/1868第9章 并發控制9.1并發事務運行存在的異常問題9.2并發調度的可串行性9.3基于封鎖的并發控制技術9.4多粒度封鎖9.8SQL Server中的并發控制9.9小結2022/7/18699.8 SQL Server中的并發控制SQL Server 支持事務處理以管理多個事務事務在遇到 COMMIT TRANSACTION 之前,不會對數據庫造成永久性的改變。事務在遇到 ROLLBACK TRANSACTION 語句時,可以撤銷它所作的改變SQL Se
43、rver 在事務執行期間動態設置和調整適當的鎖定級別,也可以手動控制如何使用鎖SQL Server 中有兩種事務隱性事務顯式事務(或稱為用戶定義事務)提交的事務不能撤銷或回滾2022/7/1870事務恢復和檢查點事務恢復SQL Serve可以在發生故障時利用日志自動恢復數據使用事務日志重作所有已提交的事務,回滾任何未提交的事務初始時,在數據緩存中和磁盤上的頁是相同的當事務提交時,改變數據緩存內的頁當緩存滿時, 改變過的頁寫入磁盤當到達檢查點時,緩存寫入磁盤。磁盤數據再次與緩存數據保持一致事務提交后,對數據庫的修改是否立即記錄到磁盤上?不是。事務提交后,只改變數據緩存的內容,到達檢查點時才寫入磁
44、盤;2022/7/1871事務恢復和檢查點為何對這五個事務分別采取這些動作?事務1在檢查點之前已經提交了,所以已經反映在數據庫中;事務2和4在檢查點之后提交,所以它們必須從日志中重作;事務3和5尚未提交,所以 SQL Server 回滾它們事務恢復需要的動作無檢查點系統故障12345重作回滾重作回滾2022/7/1872使用事務的考慮事項使用事務的指導方針事務應盡可能短,并避免嵌套事務為了盡量減少事務所花費的時間,小心使用特定的 Transact-SQL 語句在事務期間不應該等待用戶輸入。用戶輸入應該在事務開始前進行INSERT、UPDATE 和 DELETE 應該是事務中的主要語句,且應該盡
45、可能少地改變數據行若可能的話,在瀏覽數據之前不要開始事務。事務應該在初步數據分析結束后開始在事務中盡量減少對數據的訪問。這可以減少鎖定表的數目,減少數據爭用2022/7/1873顯式和隱性事務若需要在事務中包含多條語句,必須將語句組用 BEGIN TRAN 和 COMMIT TRAN(或 ROLLBACK TRAN)包裝起來。包含多條語句的事務稱為顯式事務默認情況下,SQL Server 將每一條語句視為獨立的,并在執行之后立即提交,每條數據修改語句單獨稱為隱性事務為了配置 SQL Server 隱性事務模式,可使用 SET IMPLICIT_TRANSACTION ON,或使用 sp_con
46、figure user options, 2 打開全局選項2022/7/1874SQL Server 的鎖定SQL Server 可以鎖定以下項目類型項目描述RID行標識符。用于單獨鎖定表中的一行鍵索引中的行鎖。用于保護可串行事務中的鍵范圍頁8 KB 的數據頁或索引頁擴展盤區相鄰的八個數據頁或索引頁構成的一組,在空間分配中使用表包括所有數據和索引在內的整個表數據庫整個數據庫,在數據庫的還原中使用2022/7/1875鎖的類型SQL Server 鎖的類型:基本鎖和特殊情況鎖基本鎖:包括共享鎖和排它鎖讀操作獲得共享鎖,寫操作獲得排它鎖共享鎖:用于不更改或不更新數據的操作(只讀操作),如 SELE
47、CT 語句排它鎖:用于數據修改操作,例如 INSERT、UPDATE 或 DELETE特殊情況鎖意向鎖、更新鎖、架構鎖、大容量更新鎖可使用 sp_lock 命令查看鎖的信息2022/7/1876鎖的類型意向鎖:SQL Server 內部使用意向鎖,以使鎖定沖突減至最少意向鎖是為了減少鎖定沖突而設的,它建立了鎖的層次結構,使其他事物不能在所有包括鎖的更高層次上獲得鎖;意向鎖包括意向共享(IS)、意向排他(IX)和意向排他共享 (SIX)。它并不是單獨的鎖模式,而是對其他鎖起限定作用;意向鎖的設定目的:由于 SQL Server 可以在不同粒度級別上獲得鎖,需要一個標識資源的一部分已經被鎖定的機制
48、;2022/7/1877鎖的類型更新鎖:用于可更新的資源中,防止當多個會話在讀取、鎖定及隨后可能進行的資源更新時發生常見形式的死鎖更新鎖是共享鎖和排他鎖的混合,能提高并發度。一個資源上面只能有一個更新鎖,其他共享鎖可以和更新鎖同時存在。但如果事務要修改數據,則將共享鎖升級為排他鎖,這時候其他的共享鎖不能使用;在未升級成排他鎖之前,更新鎖和共享鎖是兼容的;2022/7/1878鎖的類型架構鎖:在執行依賴于表架構的操作時使用,確保表或索引在被另外的會話引用時不被刪除或更改架構。架構鎖包括架構穩定性 (Sch-S) 鎖和架構修改 (Sch-M) 鎖大容量更新鎖:向表中大容量復制數據并指定了 TABL
49、OCK 提示時使用大容量更新鎖允許進程將數據并發地大容量復制到同一表,同時防止其他不進行大容量復制數據的進程訪問該表。當將數據大容量復制到表,且指定了 TABLOCK 提示或者使用 sp_tableoption 設置了 table lock on bulk 表選項時,將使用大容量更新鎖。2022/7/1879事務的隔離級別盡管可串行性對于事務確保數據庫中的數據在所有時間內的正確性相當重要,然而許多事務并不總是要求完全的隔離 事務準備接受不一致數據的級別稱為隔離級別。隔離級別是一個事務必須與其它事務進行隔離的程度較低的隔離級別可以增加并發,但代價是降低數據的正確性。較高的隔離級別可以確保數據的正
50、確性,但可能對并發產生負面影響。應用程序要求的隔離級別確定了 SQL Server 使用的鎖定行為。2022/7/1880事務的隔離級別SQL-92 定義了下列四種隔離級別,SQL Server 支持所有這些隔離級別: 未提交讀(事務隔離的最低級別,僅可保證不讀取物理損壞的數據)提交讀(SQL Server 默認級別)可重復讀可串行讀(事務隔離的最高級別,事務之間完全隔離) 如果事務在可串行讀隔離級別上運行,則可以保證任何并發重疊事務均是串行的 2022/7/1881事務的隔離級別SQL-92 定義了下列四種隔離級別,SQL Server 支持所有這些隔離級別: 未提交讀(事務隔離的最低級別,
51、僅可保證不讀取物理損壞的數據)提交讀(SQL Server 默認級別)可重復讀可串行讀(事務隔離的最高級別,事務之間完全隔離) 選項描述READ COMMITTED提交讀。在讀取時使用共享鎖,不允許臟讀READ UNCOMMITTED未提交讀。不使用共享鎖,忽略排他鎖,允許臟讀REPEATABLE READ可重復讀。不可能發生臟讀和不可重復讀取,保持讀鎖直到事務結束SERIALIZABLE防止其他用戶更新或插入符合本事務中 WHERE 子句條件的行。不可能發生幻像讀2022/7/1882事務的隔離級別列表下面四種隔離級別允許不同類型的行為。 事務必須運行于可重復讀或更高的隔離級別以防止丟失更新。隔離級別臟讀不可重復讀幻像未提交讀是是是提交讀否是是可重復讀否否是可串行讀否否否2022/7/1883自定義事務隔離級別默認情況下,SQL Server在 READ COMMITTED 的一個隔離級別上操作。若要在應用程序中使用更嚴
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中高檔裝飾貼面板項目投資可行性研究分析報告(2024-2030版)
- 中國高頻通信材料行業市場全景評估及發展戰略研究報告
- 2025年中國玉米油行業市場供需格局及行業前景展望報告
- 2025年中國吸油煙機行業市場評估分析及發展前景調研戰略研究報告
- 2025年中國舞臺設備行業市場運營現狀及投資方向研究報告
- 冠狀動脈旁路移植術術后護理講課件
- 新疆師范高等專科學校《體育營銷策劃》2023-2024學年第二學期期末試卷
- 昆玉職業技術學院《工程管理專業導論》2023-2024學年第二學期期末試卷
- (深圳卷)2025年中考考前最后一卷生物試卷(含答案)
- 遼寧大學《觀賞園藝學方向課程實驗》2023-2024學年第二學期期末試卷
- 2024年廣東省揭西縣教師招聘考試《教育學和心理學基礎知識》真題庫及答案
- 2025年新高考2卷(新課標Ⅱ卷)英語試卷(含答案解析)
- JG/T 283-2010膨脹玻化微珠輕質砂漿
- 電力法規考試試題及答案
- 2025昆明醫科大學海源學院輔導員考試試題及答案
- 路沿石購銷合同模板
- 誰是消費“領頭羊”:人口周期改變消費模式221mb
- 2024福建省閩投深海養殖裝備租賃有限責任公司招聘7人筆試參考題庫附帶答案詳解
- 2025年江西省贛州市八年級中考模擬預測生物試題(含答案)
- 車牌過戶協議書范本
- 火災自動報警系統故障應急預案
評論
0/150
提交評論