封鎖是指事務T在對某個數據對象(例如表、記錄等)操作之前,先向系統發出請求,對其加鎖。加鎖後事務T就對該數據對象有了一定的控制,在事務T釋放它的鎖之前,其它的事務不能更新此數據對象。
基本介紹
- 中文名:鎖
- 外文名:英文:Blockade
- 本質:先向系統發出請求,對其加鎖
- 特點:實現並控制的非常重要的技術
- 基本封鎖類型:排它鎖 共享鎖 封鎖類型 排它鎖
封鎖簡介
封鎖類型
基本類型
共享鎖(記為S鎖)
排它鎖
若事務T 對數據對象A 加上X 鎖,則只允許T 讀取和修改A , 其它任何事務都不能再對A 加任何類型的鎖,直到T 釋放A 上的鎖。
共享鎖
若事務T 對數據對象A 加上S 鎖,則其它事務只能再對A 加S 鎖,而不能加X 鎖,直到T 釋放A 上的S 鎖。
封鎖對象
封鎖單元
邏輯單元: 屬性值、屬性值集合、元組、關係、索引項、整個索引、整個資料庫等;
物理單元:頁(數據頁或索引頁)、塊等。
封鎖粒度
封鎖的粒度越小,並發度越高,但開銷也就越大。
粒度選擇
一般原則——
①需要處理大量元組的用戶事務:以關係為封鎖單元;
②需要處理多個關係的大量元組的用戶事務:以資料庫為封鎖單位;
③只處理少量元組的用戶事務:以元組為封鎖單位
封鎖協定
基本定義
①何時申請X鎖或S鎖
②持鎖時間
③何時釋放
兩段鎖協定
1. 在對任何數據進行讀、寫操作之前,事務首先要獲得對該數據的封鎖
2. 在釋放一個封鎖之後,事務不再獲得任何其他封鎖。
例:
事務1的封鎖序列:
Sck A ... Sck B ... Xck C ... Unck B ... Unck A ... Unck C;
Sck A ... Unck A ... Sck B ... Xck C ... Unck C ... Unck B;
並行執行的所有事務均遵守兩段鎖協定,則對這些事務的所有並行調度策略都是可串列化的。
死鎖
基本定義
解決方法
1. 死鎖的預防
2. 死鎖的診斷與解除
死鎖的預防
(1)一次封鎖法
一次封鎖法要求每個事務必須一次將所有要使用的數據全部加鎖,否則就不能繼續執行。
DBMS 在解決死鎖的問題上更普遍採用的是診斷並解除死鎖的方法。