【事務管理】兩段封鎖協議和沖突可串行化


如何證明遵循兩段鎖協議的事務調度處理的結果是可串行化的

怎么證明遵循兩段鎖協議的事務調度處理的結果是可串行化的?
如題
------解決方案--------------------------------------------------------
9.4. 可串行化隔離級別
可串行化(Serializable) 提供最高級別的事務隔離。 這個級別模擬串行的事務執行, 就好象事務將被一個接着一個那樣串行的,而不是並行的執行。 不過,使用這個級別的應用必須准備在串行化失敗的時候重新發動事務. 
當一個事務處於可串行化級別, 一個 SELECT 查詢只能看到在事務開始之前提交的數據而永遠看不到未提交的 數據或事務執行中其他並行事務提交的修改。 (不過,SELECT 的確看得到同一次事務中 前面的更新的效果.即使事務還沒有提交也一樣.) 這個行為和讀已提交級別是不太一樣的,讀已提交看到的是 該事務開始時的快照,而不是該事務內部當前查詢開始時的快照. 
如果一個正在執行一個 UPDATE 語句(或者 DELETE 或者 SELECT FOR UPDATE 的查詢返回的目標行正在被另一個並行的未提交的事務更 新,那么第二個試圖更新此行的事務將等待另一個事務的提交或者回卷。 如果發生了回卷,等待中的事務可以繼續修改此行。如果發生一個並行的 事務的提交,一個可串行化的事務將回卷,並返回下面信息。 
ERROR: Can't serialize access due to concurrent update
因為一個可串行化的事務在 可串行化事務開始之后不能更改被其他事務更改過的行。 
當應用收到這樣的錯誤信息時,它應該退出當前的事務然后從頭開始重新 進行整個事務.第二次運行時,該事務看到的前一次提交的修改是該數據庫 初始的樣子中的一部分,所以把新版本的行作為新事務更新的起點不會有 邏輯沖突. 請注意只有更新事務才需要重試 --- 只讀事務從來沒有串行化沖突. 
可串行化事務級別提供了嚴格的保證:每個事務都看到一個完全完整的數據庫 的視圖.不過,如果並行更新令數據庫不能維持串行執行的樣子,那么應用 必須准備重試事務,而且重做復雜的事務的開銷可能是非常可觀的.所以我們 只建議在更新查詢中包含足夠復雜的邏輯,在讀已提交級別中可能導致錯誤 的結果的情況下才使用. 

 

試證明,若並發事務遵守兩段鎖協議,則對這些事務的並發調度是可串行化的。

-解決方案-------------------------------------------------------------
證明:首先以兩個並發事務 Tl 和T2為例,存在多個並發事務的情形可以類推。根據可串行化定義可知,事務不可串行化只可能發生在下列兩種情況:
( l )事務 Tl 寫某個數據對象 A ,T2讀或寫 A ; 
( 2 )事務 Tl 讀或寫某個數據對象 A ,T2寫 A 。
下面稱 A 為潛在沖突對象。
設 Tl 和T2訪問的潛在沖突的公共對象為{A1,A2 … , An }。不失一般性,假設這組潛在沖突對象中 X =(A 1 , A2 , … , Ai }均符合情況 1 。 Y ={A i + 1 , … , An }符合所情況( 2 )。 
VX ∈ x , Tl 需要 XlockX ① 
T2 需要 Slockx 或 Xlockx ②
1 )如果操作 ① 先執行,則 Tl 獲得鎖,T2等待
由於遵守兩段鎖協議, Tl 在成功獲得 x 和 Y 中全部對象及非潛在沖突對象的鎖后,才會釋放鎖。
這時如果存在 w ∈ x 或 Y ,T2已獲得 w 的鎖,則出現死鎖;否則, Tl 在對 x 、 Y 中對象全部處理完畢后,T2才能執行。這相當於按 Tl 、T2的順序串行執行,根據可串行化定義, Tl 和幾的調度是可串行化的。 
2 )操作 ② 先執行的情況與( l )對稱因此,若並發事務遵守兩段鎖協議,在不發生死鎖的情況下,對這些事務的並發調度一定是可串行化的


------解決方案--------------------------------------------------------
尊循兩段鎖協議的事務調度處理的結果是可串行化的充分條件 
但是可串行化並不一定遵循兩段鎖協議 
2段鎖協議舉個例子是這樣的、 
事務 R1 R2 R3 
R(R1),R(R2),R(R3),W(R3),W(R2),W(R1) 
R是讀 W是寫 即是操作的意思 
概念就是操作完后不可出現再加鎖 
既然不會在出現加鎖,那就不會混亂~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM