王珊的第五版數據庫系統概論--第十一章總結概述

第十一章 併發控制

事務是併發控制的基本單位

1.併發控制機制的任務:

​ 1.對併發操作進行正確調度
​ 2.保證事務的隔離性
​ 3.保證數據庫的一致性

2.併發操作帶來的數據不一致性

1.丟失修改(Lost Update)
T1和T2同時讀取一個數據,但是T1先提交的或被T2提交的覆蓋,導致丟失。

2.不可重複讀(Non-repeatable Read)
(1)T1讀取數據,T2刪除部分記錄,T1再讀都不全。 (2)T1讀取,T2修改數據,T1再讀讀不全。(3)T1讀取,T2插入一條,T1再讀就是兩條。幻影。

3.讀“髒”數據(Dirty Read)
T1修改數據後T2讀取,T1修改撤回,T2讀的就是數據庫中不一致,讀了髒數據。

3.併發控制的主要技術

1.封鎖(Locking)
2.時間戳(Timestamp)
3.樂觀控制法
4.多版本併發控制(MVCC)

3.1封鎖(Locking)

在事務開始之前,對數據進行加鎖。排他鎖X鎖(寫鎖),共享鎖S鎖(讀鎖)。排他鎖鎖定後,別的事務不能再加鎖。如果被一個數據被共享鎖鎖定,那麼其他事務也可以添加S鎖,但是不能添加X鎖。

一級封鎖協議
事務T在修改數據R之前必須先對其加X鎖,直到事務結束才釋放。
正常結束(COMMIT),非正常結束(ROLLBACK)
一級封鎖協議可防止丟失修改,並保證事務T是可恢復的。

二級封鎖協議
一級封鎖協議加上事務T在讀取數據R之前必須先對其加S鎖,讀完後即可釋放S鎖。
二級封鎖協議可以防止丟失修改和讀“髒”數據。在二級封鎖協議中,由於讀完數據後即可釋放S鎖,所以它不能保證可重複讀。

三級封鎖協議
一級封鎖協議加上事務T在讀取數據R之前必須先對其加S鎖,直到事務結束才釋放。
三級封鎖協議可防止丟失修改、讀髒數據和不可重複讀。

在這裏插入圖片描述

活鎖

就是有一個事務在一直等待數據。後來的都會先於他獲取數據資源

避免活鎖的方法:先來先服務原則。

死鎖

T1和T2相互持有資源,並且又在等待對方資源,所以一直等待,形成死鎖。

預防死鎖的方法:一次性封鎖法(一次性封鎖所有需要的資源),順序封鎖法(歲對資源排序,逐個封鎖。)。

死鎖的診斷:超時法,等待圖法(有向圖判斷是否有環路)。

死鎖的解除:處理一個事務,將其所有資源釋放。

可串行化(Serializable)調度
多個事務的併發執行是正確的,當且僅當其結果與按某一次序串行地執行這些事務時的結果相同
可串行性(Serializability)
是併發事務正確調度的準則
一個給定的併發調度,當且僅當它是可串行化的,才認爲是正確調度

衝突可串行化

一個調度Sc在保證衝突操作的次序不變的情況下,通過交換兩個事務不衝突操作的次序得到另一個調度Sc’,如果Sc’是串行的,稱調度Sc是衝突可串行化的調度。

衝突操作:是指不同的事務對同一數據的讀寫操作和寫寫操作。

不能交換(Swap)的動作:
同一事務的兩個操作
不同事務的衝突操作。

3.2兩段鎖協議

指所有事務必須分兩個階段對數據項加鎖和解鎖
在對任何數據進行讀、寫操作之前,事務首先要獲得對該數據的封鎖
在釋放一個封鎖之後,事務不再申請和獲得任何其他封鎖

兩段鎖協議與防止死鎖的一次封鎖法區別
1.一次封鎖法要求每個事務必須一次將所有要使用的數據全部加鎖,否則就不能繼續執行,因此一次封鎖法遵守兩段鎖協議
2.但是兩段鎖協議並不要求事務必須一次將所有要使用的數據全部加鎖,因此遵守兩段鎖協議的事務可能發生死鎖。

3.3封鎖粒度

封鎖對象的大小稱爲封鎖粒度(Granularity)
封鎖的對象:邏輯單元,物理單元 。

封鎖的粒度越大,數據庫所能夠封鎖的數據單元就越少,併發度就越小,系統開銷也越小;
封鎖的粒度越小,併發度較高,但系統開銷也就越大。

多粒度封鎖(Multiple Granularity Locking)
在一個系統中同時支持多種封鎖粒度供不同的事務選擇。

選擇封鎖粒度
同時考慮封鎖開銷和併發度兩個因素, 適當選擇封鎖粒度
需要處理多個關係的大量元組的用戶事務:以數據庫爲封鎖單位
需要處理大量元組的用戶事務:以關係爲封鎖單元
只處理少量元組的用戶事務:以元組爲封鎖單位。

顯示封鎖和隱示封鎖

顯式封鎖: 直接加到數據對象上的封鎖
隱式封鎖:是該數據對象沒有獨立加鎖,是由於其上級結點加鎖而使該數據對象加上了鎖。

對數據封鎖檢查

對某個數據對象加鎖,系統要檢查
該數據對象
有無顯式封鎖與之衝突
所有上級結點
檢查本事務的顯式封鎖是否與該數據對象上的隱式封鎖衝突:(由上級結點已加的封鎖造成的)
所有下級結點
看上面的顯式封鎖是否與本事務的隱式封鎖(將加到下級結點的封鎖)衝突

3.4意向鎖

用途:提高對某個數據對象加鎖時系統的檢查效率

如果對一個結點加意向鎖,則說明該結點的下層結點正在被加鎖
對任一結點加基本鎖,必須先對它的上層結點加意向鎖。

IS意向共享鎖:如果對一個數據對象加IS鎖,表示它的後裔結點擬(意向)加S鎖。

IX意向排他鎖:如果對一個數據對象加IX鎖,表示它的後裔結點擬(意向)加X鎖。

ISX共享意向排他鎖:如果對一個數據對象加SIX鎖,表示對它加S鎖,再加IX鎖,即SIX = S + IX。

在這裏插入圖片描述

具有意向鎖的多粒度封鎖方法
1.申請封鎖時應該按自上而下的次序進行
2.釋放封鎖時則應該按自下而上的次序進行

具有意向鎖的多粒度封鎖方法
1.提高了系統的併發度
2.減少了加鎖和解鎖的開銷
3.在實際的數據庫管理系統產品中得到廣泛應用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章