您好,登錄后才能下訂單哦!
- 丟失更新 -- 在這種情況下,事務(wù)與事務(wù)之間沒(méi)有隔離。多個(gè)事務(wù)能夠讀取同一份數(shù)據(jù)并且修改它。最后對(duì)數(shù)據(jù)集做出修改的事務(wù)將勝出,而其他所有事務(wù)所作的修改都丟失了。
- 臟讀 -- 在這種情況下,一個(gè)事務(wù)能夠讀取正被其他事務(wù)修改的數(shù)據(jù)。被第一個(gè)事務(wù)讀取的數(shù)據(jù)是不一致的,因?yàn)榱硪粋€(gè)事務(wù)可能會(huì)回滾所作的修改。
- 不可重復(fù)讀 -- 這種情況有點(diǎn)類似于沒(méi)有任何隔離,一個(gè)事務(wù)兩次讀取數(shù)據(jù),但是在第二次讀取發(fā)生前,另一個(gè)事務(wù)修改了該數(shù)據(jù);因此,兩次讀取所得到的結(jié)果是不同的。因?yàn)樽x操作不能保證每次都是課重復(fù)進(jìn)行的,這種情況被稱作“不可重復(fù)讀”。
- 幻讀 -- 這種情況類似于不可重復(fù)讀。然而,不是先前被讀取的實(shí)際行在事務(wù)完成前發(fā)生了改變,而是額外的行被添加到了表中,導(dǎo)致第二次讀取返回了不同的行集合。
(詳情請(qǐng)參考我的另一篇blog:SQL Server 2008 R2 事務(wù)與隔離級(jí)別實(shí)例講解)
- Read Uncommitted
- Read Committed
- Repeatable Read
- Serializable
- Snapshot
- Read Committed Snapshot
除了選擇鎖類型,Lock Manager還基于所執(zhí)行語(yǔ)句的性質(zhì)以及所影響的行數(shù)自動(dòng)地調(diào)整鎖粒度(如row, page, table)。
- 共享鎖
- 更新鎖
- 獨(dú)占鎖
- 意向鎖
- 架構(gòu)鎖
- 大容量更新鎖
- DATABASE -- 無(wú)論何時(shí)當(dāng)一個(gè)SQL Server 進(jìn)程正在使用除master以外的數(shù)據(jù)庫(kù)時(shí),Lock Manager為該進(jìn)程授予數(shù)據(jù)庫(kù)級(jí)的鎖。數(shù)據(jù)庫(kù)級(jí)的鎖總是共享鎖,用于跟蹤何時(shí)數(shù)據(jù)庫(kù)在使用中,以防其他進(jìn)程刪除該數(shù)據(jù)庫(kù),將數(shù)據(jù)庫(kù)置為脫機(jī),或者恢復(fù)數(shù)據(jù)庫(kù)。注意,由于master和tempdb數(shù)據(jù)庫(kù)不能被刪除或置為脫機(jī),所以不需要在它們之上加鎖。
- FILE-- 文件級(jí)的鎖用于鎖定數(shù)據(jù)庫(kù)文件。
- EXTENT -- Extent鎖用于鎖定extents,通常僅在空間分配和重新分配的時(shí)候使用。一個(gè)extent由8個(gè)連續(xù)的數(shù)據(jù)頁(yè)或索引頁(yè)組成。Extent鎖可以是共享鎖也可以是獨(dú)占鎖。
- ALLOCATION_UNIT -- 使用在數(shù)據(jù)庫(kù)分配單元上。
- TABLE -- 這種級(jí)別的鎖將鎖定整個(gè)表,包括數(shù)據(jù)和索引。何時(shí)將獲得表級(jí)鎖的例子包括在Serializable隔離級(jí)別下從包含大量數(shù)據(jù)的表中選取所有的行,以及在表上執(zhí)行不帶過(guò)濾條件的update或delete。
- Heap or B-Tree (HOBT) -- 用于堆數(shù)據(jù)頁(yè),或者索引的二叉樹(shù)結(jié)構(gòu)。
- PAGE -- 使用頁(yè)級(jí)鎖,由8KB數(shù)據(jù)或者索引信息組成的整個(gè)頁(yè)被鎖定。當(dāng)需要讀取一頁(yè)的所有行或者需要執(zhí)行頁(yè)級(jí)別的維護(hù)如頁(yè)拆分后更新頁(yè)指針時(shí),將會(huì)獲取頁(yè)級(jí)鎖。
- Row ID (RID) -- 使用RID鎖,頁(yè)內(nèi)的單一行被鎖定。無(wú)論何時(shí)當(dāng)提供最大化的資源并發(fā)性訪問(wèn)是有效并且可能時(shí),將獲得RID鎖。
- KEY -- SQL Server使用兩種類型的Key鎖。其中一個(gè)的使用取決于當(dāng)前會(huì)話的鎖隔離級(jí)別。對(duì)于運(yùn)行于Read Committed 或者 Repeatable Read 隔離模式下的事務(wù),SQL Server 鎖定與被訪問(wèn)的行相關(guān)聯(lián)的的實(shí)際索引key。(如果是表的聚集索引,數(shù)據(jù)行位于索引的葉級(jí)。行上在這些你看到的是Key鎖而不是行級(jí)鎖。)若在Serializable隔離模式下,通過(guò)鎖定一定范圍的key值從而不允許新的行插入到該范圍內(nèi),SQL Server防止了“幻讀”。這些鎖因而被稱作“key-range lock”。
- METADATA -- 用于鎖定系統(tǒng)目錄信息(元數(shù)據(jù))。
- APPLICATION -- 允許用戶定義他們自己的鎖,指定資源名稱、鎖模式、所有者、timeout間隔。
人們經(jīng)常以為死鎖發(fā)生在數(shù)據(jù)頁(yè)級(jí)或數(shù)據(jù)行級(jí)。事實(shí)上,死鎖經(jīng)常發(fā)生在索引頁(yè)級(jí)或索引鍵級(jí)。下圖展示了由于索引鍵級(jí)的競(jìng)爭(zhēng)引發(fā)的死鎖場(chǎng)景。
- 循環(huán)死鎖 -- 兩個(gè)進(jìn)程請(qǐng)求不同資源上的鎖,每一個(gè)進(jìn)程都需要對(duì)方持有的該資源上的鎖,這時(shí)將發(fā)生循環(huán)死鎖。如下圖。
- 轉(zhuǎn)換死鎖-- 兩個(gè)或多個(gè)進(jìn)程都在事務(wù)中持有同一資源上的共享鎖,并且都想把它升級(jí)為獨(dú)占鎖,但是,誰(shuí)也沒(méi)法升級(jí)直到其他的進(jìn)程釋放共享鎖。 如圖所示。
- HOLDLOCK -- 在語(yǔ)句執(zhí)行期間,或者在整個(gè)事務(wù)期間(如果語(yǔ)句在事務(wù)中的話)保持共享鎖。該選項(xiàng)等同于Serializable 隔離級(jí)別。
- NOLOCK -- 使用此選項(xiàng)指定不對(duì)資源施加共享鎖。它類似于在0隔離級(jí)別(Read Uncommitted)下運(yùn)行查詢。NOLOCK選項(xiàng)在對(duì)結(jié)果精度要求不嚴(yán)格的報(bào)表工作環(huán)境下很有用。
- READUNCOMMITTED -- 與指定 Read Uncommitted 隔離級(jí)別和NOLOCK提示完全一樣。
- READCOMMITTED -- 與指定 Read Committed 隔離級(jí)別一樣。
- READCOMMITTEDLOCK -- 當(dāng)數(shù)據(jù)被讀取時(shí)獲得共享鎖,讀取完成時(shí)釋放共享鎖,不管是否設(shè)定了 READ_COMMITTED_SNAPSHOT 隔離級(jí)別。
- REPEATABLEREAD -- 與指定 Repeatable Read 隔離級(jí)別一樣,類似于HOLDLOCK提示。
- SERIALIZABLE -- 與指定 Serializable 隔離級(jí)別一樣,類似于HOLDLOCK提示。
- READPAST -- 讓查詢忽略被其他事務(wù)鎖定的行或頁(yè),僅返回能夠被讀取的數(shù)據(jù)。只能用在運(yùn)行于Read Committed 或 Repeatable Read 隔離級(jí)別下的事務(wù)中。
- ROWLOCK -- 強(qiáng)制 Lock Manager 在資源上施加行級(jí)鎖而非頁(yè)級(jí)鎖或表級(jí)鎖。
- PAGLOCK -- 強(qiáng)制 Lock Manager 在資源上施加頁(yè)級(jí)鎖而非行級(jí)鎖或表級(jí)鎖。
- TABLOCK -- 強(qiáng)制 Lock Manager 在資源上施加表級(jí)鎖而非行級(jí)鎖或頁(yè)級(jí)鎖。
- TABLOCKX -- 強(qiáng)制 Lock Manager 在資源上施加表級(jí)獨(dú)占鎖而非行級(jí)鎖或頁(yè)級(jí)鎖。
- UPDLOCK -- 類似于HOLDLOCK,不過(guò)HOLDLOCK在資源上應(yīng)用共享鎖,而UPDLOCK是在事務(wù)期間應(yīng)用更新鎖。
- XLOCK -- 在事務(wù)期間在資源上應(yīng)用獨(dú)占鎖。它阻止其他事務(wù)獲取該資源上的鎖。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。