sqlserver行級鎖排它鎖共享鎖的使用

sqlserver行級鎖排它鎖共享鎖的使用

ID:8980117

大?。?3.50 KB

頁數(shù):7頁

時間:2018-04-13

sqlserver行級鎖排它鎖共享鎖的使用_第1頁
sqlserver行級鎖排它鎖共享鎖的使用_第2頁
sqlserver行級鎖排它鎖共享鎖的使用_第3頁
sqlserver行級鎖排它鎖共享鎖的使用_第4頁
sqlserver行級鎖排它鎖共享鎖的使用_第5頁
資源描述:

《sqlserver行級鎖排它鎖共享鎖的使用》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。

1、鎖的概述一.為什么要引入鎖多個用戶同時對數(shù)據(jù)庫的并發(fā)操作時會帶來以下數(shù)據(jù)不一致的問題:丟失更新A,B兩個用戶讀同一數(shù)據(jù)并進(jìn)行修改,其中一個用戶的修改結(jié)果破壞了另一個修改的結(jié)果,比如訂票系統(tǒng)臟讀A用戶修改了數(shù)據(jù),隨后B用戶又讀出該數(shù)據(jù),但A用戶因為某些原因取消了對數(shù)據(jù)的修改,數(shù)據(jù)恢復(fù)原值,此時B得到的數(shù)據(jù)就與數(shù)據(jù)庫內(nèi)的數(shù)據(jù)產(chǎn)生了不一致不可重復(fù)讀A用戶讀取數(shù)據(jù),隨后B用戶讀出該數(shù)據(jù)并修改,此時A用戶再讀取數(shù)據(jù)時發(fā)現(xiàn)前后兩次的值不一致并發(fā)控制的主要方法是封鎖,鎖就是在一段時間內(nèi)禁止用戶做某些操作以避免產(chǎn)生數(shù)據(jù)不一致二鎖的分類鎖的

2、類別有兩種分法:1.從數(shù)據(jù)庫系統(tǒng)的角度來看:分為獨占鎖(即排它鎖),共享鎖和更新鎖MS-SQLServer使用以下資源鎖模式。鎖模式描述共享(S)用于不更改或不更新數(shù)據(jù)的操作(只讀操作),如SELECT語句。更新(U)用于可更新的資源中。防止當(dāng)多個會話在讀取、鎖定以及隨后可能進(jìn)行的資源更新時發(fā)生常見形式的死鎖。排它(X)用于數(shù)據(jù)修改操作,例如INSERT、UPDATE或DELETE。確保不會同時同一資源進(jìn)行多重更新。意向鎖用于建立鎖的層次結(jié)構(gòu)。意向鎖的類型為:意向共享(IS)、意向排它(IX)以及與意向排它共享(SIX)。

3、架構(gòu)鎖在執(zhí)行依賴于表架構(gòu)的操作時使用。架構(gòu)鎖的類型為:架構(gòu)修改(Sch-M)和架構(gòu)穩(wěn)定性(Sch-S)。大容量更新(BU)向表中大容量復(fù)制數(shù)據(jù)并指定了TABLOCK提示時使用。共享鎖共享(S)鎖允許并發(fā)事務(wù)讀取(SELECT)一個資源。資源上存在共享(S)鎖時,任何其它事務(wù)都不能修改數(shù)據(jù)。一旦已經(jīng)讀取數(shù)據(jù),便立即釋放資源上的共享(S)鎖,除非將事務(wù)隔離級別設(shè)置為可重復(fù)讀或更高級別,或者在事務(wù)生存周期內(nèi)用鎖定提示保留共享(S)鎖。更新鎖更新(U)鎖可以防止通常形式的死鎖。一般更新模式由一個事務(wù)組成,此事務(wù)讀取記錄,獲取資源(

4、頁或行)的共享(S)鎖,然后修改行,此操作要求鎖轉(zhuǎn)換為排它(X)鎖。如果兩個事務(wù)獲得了資源上的共享模式鎖,然后試圖同時更新數(shù)據(jù),則一個事務(wù)嘗試將鎖轉(zhuǎn)換為排它(X)鎖。共享模式到排它鎖的轉(zhuǎn)換必須等待一段時間,因為一個事務(wù)的排它鎖與其它事務(wù)的共享模式鎖不兼容;發(fā)生鎖等待。第二個事務(wù)試圖獲取排它(X)鎖以進(jìn)行更新。由于兩個事務(wù)都要轉(zhuǎn)換為排它(X)鎖,并且每個事務(wù)都等待另一個事務(wù)釋放共享模式鎖,因此發(fā)生死鎖。若要避免這種潛在的死鎖問題,請使用更新(U)鎖。一次只有一個事務(wù)可以獲得資源的更新(U)鎖。如果事務(wù)修改資源,則更新(U)鎖

5、轉(zhuǎn)換為排它(X)鎖。否則,鎖轉(zhuǎn)換為共享鎖。排它鎖排它(X)鎖可以防止并發(fā)事務(wù)對資源進(jìn)行訪問。其它事務(wù)不能讀取或修改排它(X)鎖鎖定的數(shù)據(jù)。意向鎖意向鎖表示SQLServer需要在層次結(jié)構(gòu)中的某些底層資源上獲取共享(S)鎖或排它(X)鎖。例如,放置在表級的共享意向鎖表示事務(wù)打算在表中的頁或行上放置共享(S)鎖。在表級設(shè)置意向鎖可防止另一個事務(wù)隨后在包含那一頁的表上獲取排它(X)鎖。意向鎖可以提高性能,因為SQLServer僅在表級檢查意向鎖來確定事務(wù)是否可以安全地獲取該表上的鎖。而無須檢查表中的每行或每頁上的鎖以確定事務(wù)是否

6、可以鎖定整個表。意向鎖包括意向共享(IS)、意向排它(IX)以及與意向排它共享(SIX)。鎖模式描述意向共享(IS)通過在各資源上放置S鎖,表明事務(wù)的意向是讀取層次結(jié)構(gòu)中的部分(而不是全部)底層資源。意向排它(IX)通過在各資源上放置X鎖,表明事務(wù)的意向是修改層次結(jié)構(gòu)中的部分(而不是全部)底層資源。IX是IS的超集。與意向排它共享(SIX)通過在各資源上放置IX鎖,表明事務(wù)的意向是讀取層次結(jié)構(gòu)中的全部底層資源并修改部分(而不是全部)底層資源。允許頂層資源上的并發(fā)IS鎖。例如,表的SIX鎖在表上放置一個SIX鎖(允許并發(fā)IS

7、鎖),在當(dāng)前所修改頁上放置IX鎖(在已修改行上放置X鎖)。雖然每個資源在一段時間內(nèi)只能有一個SIX鎖,以防止其它事務(wù)對資源進(jìn)行更新,但是其它事務(wù)可以通過獲取表級的IS鎖來讀取層次結(jié)構(gòu)中的底層資源。獨占鎖:只允許進(jìn)行鎖定操作的程序使用,其他任何對他的操作均不會被接受。執(zhí)行數(shù)據(jù)更新命令時,SQLServer會自動使用獨占鎖。當(dāng)對象上有其他鎖存在時,無法對其加獨占鎖。共享鎖:共享鎖鎖定的資源可以被其他用戶讀取,但其他用戶無法修改它,在執(zhí)行Select時,SQLServer會對對象加共享鎖。更新鎖:當(dāng)SQLServer準(zhǔn)備更新數(shù)據(jù)

8、時,它首先對數(shù)據(jù)對象作更新鎖鎖定,這樣數(shù)據(jù)將不能被修改,但可以讀取。等到SQLServer確定要進(jìn)行更新數(shù)據(jù)操作時,他會自動將更新鎖換為獨占鎖,當(dāng)對象上有其他鎖存在時,無法對其加更新鎖。2.從程序員的角度看:分為樂觀鎖和悲觀鎖。樂觀鎖:完全依靠數(shù)據(jù)庫來管理鎖的工作。悲觀鎖:程序員自己管理數(shù)據(jù)或?qū)ο笊系逆i

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。