2018年11月17日 星期六

筆記_鎖定類型


一、    鎖定類型Lock types
1.   Shared lock (S):執行select指令時發生,相容於SharedUpdatelock
2.   Exclusive lock (X):執行insertupdatedelete時發生,不會相容於任何一個lock
3.   Update lock (U):執行類似updtae tablea set col1=’A’ where ID=2的時令時,sql server會先搜尋符合條件的資料,此時就會產生Update lock,而當找到並更新內容時會轉換成Exclusive lock
4.   Intent lock (IS, IX, IU, etc):當rowExclusive lock時,在pagetabledatabase層級就會產生IX lock,用來增加檢查lock的相容性效率。
二、    Update lockIntent lock說明
1.   Update lock的功能:預防死結,當有兩個session語法要更新同一筆資料時,例如:updtae tablea set col1=’A’ where ID=2
l   若沒有Update lock的情況如下:
(1) 第一個session執行SQL時,因為要搜尋資料,故會放置Shared lock
(2) 接著第二個session執行SQL也會放置Shared lock,因為Shared lock是相容的。
(3) 當第一個session要更新資料時,會將Shared locks轉成Exclusive lock,但因為第二個sessionShared locks,故會等待第二個釋放lock
(4) 當第二個session要更新資料時,也會將Shared lock轉成Exclusive lock,但因為第一個sessionShared lock,故會等待第一個釋放lock
(5) 兩個session會無限的等待,就會產生死結(deadlock)
l   若有Update lock的情況如下:
(1) 第一個session執行SQL時,因為要搜尋資料,故會放置Update lock
(2) 接著第二個session執行SQL也會放置Update lock,但因為Update lock是不相容的,故第二個session會被blocking,無法放置lock
(3) 第一個session要更新資料將Shared lock成功轉成Exclusive lock
(4) 第一個session完成交易,釋放Exclusive lock
(5) 第二個sessionShared lock成功轉成Exclusive lock並也完成交易。
(6) 皆大歡喜。
2.   Intent lock的功能:增加檢查lock相容性的效率。
(1) session1刪除一筆資料,對row data放置Exclusive lock
(2) 此時session1也會對pagetabledatabase放置Intent Exclusive lock
(3) 若有session2要對table放置Shared lock時,session2藉由Intent Exclusive lock知道table內已有Exclusive lock,而不用逐筆檢查每一筆row
三、    參考:


沒有留言:

張貼留言