(数据库系统概论|王珊)第十一章并发控制-第五、六、七节:并发调度的可串行性、两段锁协议和封锁的粒度
文章目錄
- 一:可串行化調(diào)度
- 二:沖突可串行化調(diào)度
- (1)沖突操作
- (2)可串行化調(diào)度的充分條件:沖突可串行化
- 三:兩段鎖協(xié)議
- 四:封鎖的粒度
- (1)概念
- (2)選擇封鎖的原則
- (3)多粒度封鎖
- A:多粒度樹
- B:多粒度封鎖協(xié)議
- (4)意向鎖
一:可串行化調(diào)度
可串行化調(diào)度:多個(gè)事務(wù)的并發(fā)執(zhí)行是正確的,當(dāng)且僅當(dāng)其結(jié)果與按某一次序串行地執(zhí)行這些事務(wù)時(shí)的結(jié)果相同,稱這種調(diào)度策略為可串行化(serializable)調(diào)度。可串行性是并發(fā)事務(wù)正確調(diào)度的準(zhǔn)則, 也即一個(gè)給定的并發(fā)調(diào)度,當(dāng)且僅當(dāng)它是可串行化的,才認(rèn)為是正確調(diào)度
例如,下面有兩個(gè)事務(wù),分別包含下列操作
事務(wù)T1T_{1}T1?: 讀B、A=B+1、寫回A;
事務(wù)T2T_{2}T2?: 讀A、B=A+1、寫回B;
假設(shè)A、B初值均為2,兩個(gè)事務(wù)最多只有兩種串行執(zhí)行策略
- T1T_{1}T1?->T2T_{2}T2?:A=3,B=4
- T2T_{2}T2?->T1T_{1}T1?:A=4,B=3
因此事務(wù)T1T_{1}T1?和T2T_{2}T2?不管怎樣交叉并行運(yùn)行,只有兩種正確的結(jié)果(如上)。其他結(jié)果均是錯(cuò)誤的,相應(yīng)調(diào)度也稱之為不可串行化調(diào)度
二:沖突可串行化調(diào)度
(1)沖突操作
沖突操作:是指不同事務(wù)對(duì)同一個(gè)數(shù)據(jù)的讀寫操作和寫寫操作。除此之外,其他操作均為不沖突操作
- Ri(x)R_{i}(x)Ri?(x)與Wj(x)W_{j}(x)Wj?(x):事務(wù)TiT_{i}Ti?讀x,事務(wù)TjT_{j}Tj?寫x
- Wi(x)W_{i}(x)Wi?(x)與Wj(x)W_{j}(x)Wj?(x):事務(wù)TiT_{i}Ti?寫x,事務(wù)TjT_{j}Tj?寫x
另外注意各種交換
- 不同事務(wù)的沖突操作不可交換
- 同一事務(wù)內(nèi)部的兩個(gè)操作不可交換
- 不同事務(wù),同一數(shù)據(jù)的讀讀操作可以交換
- 不同事務(wù),不同數(shù)據(jù),無論讀寫均可交換
(2)可串行化調(diào)度的充分條件:沖突可串行化
沖突可串行化:一個(gè)調(diào)度SC在保證沖突操作的次序不變的情況下,通過交換兩個(gè)事務(wù)不沖突操作的次序得到另一個(gè)調(diào)度SC‘^{`}‘,如果SC‘^{`}‘是串行的,則稱調(diào)度SC為沖突可串行化的調(diào)度。若一個(gè)調(diào)度是沖突可串行化的,那么它一定是可串行化的調(diào)度
- 注意:沖突可串行化調(diào)度是可串行化調(diào)度的充分條件,不是必要條件。也就是說有可能某個(gè)調(diào)度是可串行調(diào)度,但它卻不是沖突可串行化調(diào)度
例如,現(xiàn)在有一個(gè)調(diào)度SC1=r1(A)w1(A)r2(A)w2(A)r1(B)w1(B)r2(B)w2(B)r_{1}(A)w_{1}(A)r_{2}(A)w_{2}(A)r_{1}(B)w_{1}(B)r_{2}(B)w_{2}(B)r1?(A)w1?(A)r2?(A)w2?(A)r1?(B)w1?(B)r2?(B)w2?(B)
考察兩個(gè)不同事務(wù)的交界處,看它是否滿足交換的條件
交換后SC1變?yōu)榱薙C2=r1(A)w1(A)r1(B)w1(B)r2(A)w2(A)r2(B)w2(B)r_{1}(A)w_{1}(A)r_{1}(B)w_{1}(B)r_{2}(A)w_{2}(A)r_{2}(B)w_{2}(B)r1?(A)w1?(A)r1?(B)w1?(B)r2?(A)w2?(A)r2?(B)w2?(B),它等價(jià)于一個(gè)串行調(diào)度T1T_{1}T1?->T2T_{2}T2?,因此SC1是沖突可串行化調(diào)度,也一定是一個(gè)可串行化調(diào)度
三:兩段鎖協(xié)議
兩段鎖協(xié)議(2PL):兩段鎖協(xié)議是三級(jí)封鎖協(xié)議的特例,目前DBMS普遍采用該種協(xié)議實(shí)現(xiàn)并發(fā)調(diào)度的可串行性。具體內(nèi)容如下
- 在對(duì)任何數(shù)據(jù)進(jìn)行讀、寫操作之前,首先要申請(qǐng)并獲得對(duì)該數(shù)據(jù)的封鎖
- 在釋放一個(gè)封鎖之后,事務(wù)不再申請(qǐng)和獲得任何其他封鎖
其中“兩段”是指事務(wù)分為兩個(gè)階段
- 第一階段:獲得封鎖,也稱為擴(kuò)展階段
- 第二階段:釋放封鎖,也稱為收縮階段
另外還需要注意
- 事務(wù)遵守兩段鎖協(xié)議是可串行化調(diào)度的充分條件,而非必要條件
- 若并發(fā)事物都遵循兩段鎖協(xié)議,則對(duì)其的任何并發(fā)點(diǎn)都策略都是可串行化的
- 若對(duì)并發(fā)事務(wù)的一個(gè)調(diào)度是可串行化的,不一定所有事務(wù)都符合兩段鎖協(xié)議
最后注意區(qū)分兩段鎖協(xié)議和一次封鎖法
- 一次封鎖法要求每個(gè)事務(wù)必須一次將所有要使用的數(shù)據(jù)全部加鎖,否則就不能繼續(xù)執(zhí)行,因此一次封鎖法遵守兩段鎖協(xié)議
- 但是兩段鎖協(xié)議并不要求事務(wù)必須一次將所有要使用的數(shù)據(jù)全部加鎖,因此遵守兩段鎖協(xié)議的事務(wù)可能發(fā)生死鎖
四:封鎖的粒度
(1)概念
封鎖粒度(granularity):是指封鎖對(duì)象的大小。封鎖對(duì)象可以是邏輯單元,也可以是物理單元。封鎖粒度與系統(tǒng)并發(fā)度和并發(fā)控制的開銷密切相關(guān),一般來說,封鎖粒度越大,數(shù)據(jù)庫所能封鎖的數(shù)據(jù)單元就越少,并發(fā)度越小,開銷越小
- 邏輯單元:元組、關(guān)系、整個(gè)數(shù)據(jù)庫等
- 物理單元:頁(數(shù)據(jù)頁或索引頁)、物理記錄等
(2)選擇封鎖的原則
- 需要處理多個(gè)關(guān)系的大量元組的用戶事務(wù)時(shí)以數(shù)據(jù)庫為封鎖單位
- 需要處理大量元組的用戶事務(wù)時(shí)以關(guān)系為封鎖單元
- 只處理少量元組的用戶事務(wù)時(shí)以元組為封鎖單位
(3)多粒度封鎖
多粒度封鎖:在一個(gè)系統(tǒng)中同時(shí)支持多種封鎖粒度供不同的事務(wù)選擇
A:多粒度樹
多粒度樹是以樹形結(jié)構(gòu)來表示多級(jí)封鎖粒度的方法
- 根結(jié)點(diǎn)是整個(gè)數(shù)據(jù)庫,表示最大的數(shù)據(jù)粒度
- 葉結(jié)點(diǎn)表示最小的數(shù)據(jù)粒度
B:多粒度封鎖協(xié)議
多粒度封鎖協(xié)議:允許多粒度樹中的每個(gè)結(jié)點(diǎn)被獨(dú)立地加鎖,對(duì)一個(gè)結(jié)點(diǎn)加鎖意味著這個(gè)結(jié)點(diǎn)的所有后裔結(jié)點(diǎn)也會(huì)被加上相同類型的鎖。因此,在多粒度封鎖中一個(gè)數(shù)據(jù)對(duì)象可能存在如下兩種封鎖方式
- 顯式封鎖:直接加到數(shù)據(jù)庫對(duì)象上的封鎖
- 隱式封鎖:由于上級(jí)結(jié)點(diǎn)加鎖而使該數(shù)據(jù)對(duì)象也被加鎖
多粒度封鎖方法中,顯式封鎖和隱式封鎖的效果是一樣的,因此系統(tǒng)檢查封鎖沖突時(shí)不僅要檢查顯式封鎖還要檢查隱式封鎖
- 例如事務(wù)TTT要對(duì)關(guān)系R1R_{1}R1?加XXX鎖,系統(tǒng)必須搜索其上級(jí)結(jié)點(diǎn)數(shù)據(jù)庫、關(guān)系R1R_{1}R1?以及R1R_{1}R1?的下級(jí)結(jié)點(diǎn),即R1R_{1}R1?中的每一個(gè)元組,上下搜索。如果其中某一個(gè)數(shù)據(jù)對(duì)象已經(jīng)加了不相容鎖,則TTT必須等待
(4)意向鎖
- 一般地,對(duì)某個(gè)數(shù)據(jù)對(duì)象加鎖,系統(tǒng)要檢查該數(shù)據(jù)對(duì)象上有無顯式封鎖與之沖突:再檢查其所有上級(jí)結(jié)點(diǎn),看本事務(wù)的顯式封鎖是否與該數(shù)據(jù)對(duì)象上的隱式封鎖(即由于上級(jí)結(jié)點(diǎn)已加的封鎖造成的)沖突;還要檢查其所有下級(jí)結(jié)點(diǎn),看它們的顯式封鎖是否與本事務(wù)的隱式封鎖(將加到下級(jí)結(jié)點(diǎn)的封鎖)沖突
- 可以看出,這樣的檢查方法效率很低,因此意向鎖由此誕生
意向鎖:如果對(duì)一個(gè)結(jié)點(diǎn)加意向鎖,則說明該結(jié)點(diǎn)的下層結(jié)點(diǎn)正在被加鎖;對(duì)任一結(jié)點(diǎn)加鎖時(shí),必須先對(duì)它的上層結(jié)點(diǎn)加意向鎖。有如下三種常用的意向鎖
- 意向共享鎖(IS鎖):如果對(duì)一個(gè)數(shù)據(jù)對(duì)象加IS鎖,表示它的后裔結(jié)點(diǎn)擬(意向)加S鎖
- 意向排他鎖(IX鎖):如果對(duì)一個(gè)數(shù)據(jù)對(duì)象加IX鎖,表示它的后裔結(jié)點(diǎn)擬(意向)加X鎖
- 共享意向排他鎖(SIX鎖):如果對(duì)一個(gè)數(shù)據(jù)對(duì)象加SIX鎖,表示對(duì)它加S鎖,再加IX鎖,即SIX=S+IX
鎖相容矩陣
總結(jié)
以上是生活随笔為你收集整理的(数据库系统概论|王珊)第十一章并发控制-第五、六、七节:并发调度的可串行性、两段锁协议和封锁的粒度的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HTML Canvas
- 下一篇: (数据库系统概论|王珊)第三章关系数据库