SQL Server誤區(qū)30日談 第23天 有關(guān)鎖升級(jí)的誤區(qū)
更新時(shí)間:2013年01月09日 21:26:34 作者:
在SQL Server 2005和之前的版本,頁(yè)鎖會(huì)直接升級(jí)到表鎖。在SQL Server 2005或SQL Server 2008,你可以通過(guò)如下跟蹤標(biāo)志改變鎖升級(jí)的行為
誤區(qū) #23: 鎖升級(jí)的過(guò)程是由行鎖升級(jí)到頁(yè)鎖,再由頁(yè)鎖升級(jí)到表鎖
錯(cuò)誤
實(shí)際不是,在SQL Server 2005和之前的版本,頁(yè)鎖會(huì)直接升級(jí)到表鎖。
在SQL Server 2005或SQL Server 2008,你可以通過(guò)如下跟蹤標(biāo)志改變鎖升級(jí)的行為:
標(biāo)志1211-完全禁止鎖升級(jí),但鎖使用的內(nèi)存會(huì)被限制在動(dòng)態(tài)分配內(nèi)存的60%,當(dāng)超過(guò)這個(gè)值時(shí),更多的鎖將會(huì)伴隨著內(nèi)存溢出錯(cuò)誤而失敗。
在SQL Server 2008中,還可以以表為單位進(jìn)行鎖行為的設(shè)置,可以通過(guò)ALTER TABLE blah SET (LOCK_ESCALATION = XXX),在這個(gè)命令中XXX所代表的是下面幾項(xiàng)中的一項(xiàng):
TABLE: 直接從行鎖升級(jí)到表鎖。
錯(cuò)誤
實(shí)際不是,在SQL Server 2005和之前的版本,頁(yè)鎖會(huì)直接升級(jí)到表鎖。
在SQL Server 2005或SQL Server 2008,你可以通過(guò)如下跟蹤標(biāo)志改變鎖升級(jí)的行為:
標(biāo)志1211-完全禁止鎖升級(jí),但鎖使用的內(nèi)存會(huì)被限制在動(dòng)態(tài)分配內(nèi)存的60%,當(dāng)超過(guò)這個(gè)值時(shí),更多的鎖將會(huì)伴隨著內(nèi)存溢出錯(cuò)誤而失敗。
- 標(biāo)志1224-禁止鎖升級(jí),但內(nèi)存使用超過(guò)40%時(shí),會(huì)自動(dòng)開啟鎖升級(jí)
在SQL Server 2008中,還可以以表為單位進(jìn)行鎖行為的設(shè)置,可以通過(guò)ALTER TABLE blah SET (LOCK_ESCALATION = XXX),在這個(gè)命令中XXX所代表的是下面幾項(xiàng)中的一項(xiàng):
TABLE: 直接從行鎖升級(jí)到表鎖。
- AUTO:如果存在表分區(qū),則升級(jí)為分區(qū)鎖,但不會(huì)進(jìn)一步升級(jí)。
- DISABLE:禁用鎖升級(jí),這并不意味著禁用表鎖,就像BOL(Books Online entry)中所說(shuō),在序列化隔離等級(jí)的條件下進(jìn)行表掃描等操作時(shí)還需要表鎖。
在2008年1月的時(shí)候,我寫了一篇包含分區(qū)鎖例子的博文,請(qǐng)看:SQL Server 2008: Partition-level lock escalation details and examples。
或許你會(huì)想為什么LOCK_ESCALATION = XXX設(shè)置中AUTO不是默認(rèn)值,這時(shí)因?yàn)樵缙跍y(cè)試中某些人發(fā)現(xiàn)這個(gè)選項(xiàng)更容易引起死鎖。就像對(duì)于上述兩個(gè)有關(guān)鎖的跟蹤標(biāo)記一樣,對(duì)于這個(gè)選項(xiàng)設(shè)置為AUTO也同樣需要謹(jǐn)慎。
相關(guān)文章
MS SQL Server2014鏈接到MS SQL Server 2000的解決方案及問題處理
在大數(shù)據(jù)中,我們經(jīng)常需要用到分布式數(shù)據(jù),那么在SqlServer中,我們?nèi)绾蝸?lái)實(shí)現(xiàn)呢,答案就是創(chuàng)建鏈接服務(wù)器!同版本的SqlServer之間的操作網(wǎng)上有很多,今天我們來(lái)探討下不同版本SqlServer之間的鏈接問題。2014-07-07
SQL Server實(shí)現(xiàn)跨庫(kù)跨服務(wù)器訪問的方法
這篇文章主要給大家介紹了關(guān)于SQL Server實(shí)現(xiàn)跨庫(kù)跨服務(wù)器訪問的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用SQL Server具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
SQL SERVER數(shù)據(jù)轉(zhuǎn)換失敗的原因及解決方法
在使用 SQL Server 數(shù)據(jù)庫(kù)過(guò)程中,我們經(jīng)常會(huì)遇到數(shù)據(jù)轉(zhuǎn)換失敗的情況,當(dāng) SQL Server 在執(zhí)行查詢、插入或更新操作時(shí),如果發(fā)現(xiàn)數(shù)據(jù)類型不匹配或無(wú)法進(jìn)行有效的轉(zhuǎn)換,就會(huì)拋出轉(zhuǎn)換失敗的錯(cuò)誤,本文給大家介紹了SQL SERVER數(shù)據(jù)轉(zhuǎn)換失敗的原因及解決方法2024-09-09
做購(gòu)物車系統(tǒng)時(shí)利用到得幾個(gè)sqlserver 存儲(chǔ)過(guò)程
最近使用asp.net+sql2000開始開發(fā)一個(gè)小型商城系統(tǒng),其中涉及到得購(gòu)物車功能主要是仿照淘寶實(shí)現(xiàn)的.2009-12-12
SQLSERVER 表分區(qū)操作和設(shè)計(jì)方法
SQLSERVER 表分區(qū)操作和設(shè)計(jì)方法,需要的朋友可以參考下。2010-09-09
Sql Server事務(wù)語(yǔ)法及使用方法實(shí)例分析
這篇文章主要介紹了Sql Server事務(wù)語(yǔ)法及使用方法,結(jié)合實(shí)例形式分析了Sql Server事務(wù)的概念、原理及相關(guān)使用技巧,需要的朋友可以參考下2019-02-02
SQL server服務(wù)顯示遠(yuǎn)程過(guò)程調(diào)用失敗的解決方法
這篇文章主要為大家介紹了SQL server服務(wù)顯示遠(yuǎn)程過(guò)程調(diào)用失敗的解決方法,還為大家提供了解決SQL SERVER 2008 R2配置管理器出現(xiàn)“遠(yuǎn)程過(guò)程調(diào)用失敗”(0x800706be)錯(cuò)誤提示的方案,感興趣的小伙伴們可以參考一下2016-05-05

