SQL Server誤區(qū)30日談 第23天 有關鎖升級的誤區(qū)
更新時間:2013年01月09日 21:26:34 作者:
在SQL Server 2005和之前的版本,頁鎖會直接升級到表鎖。在SQL Server 2005或SQL Server 2008,你可以通過如下跟蹤標志改變鎖升級的行為
誤區(qū) #23: 鎖升級的過程是由行鎖升級到頁鎖,再由頁鎖升級到表鎖
錯誤
實際不是,在SQL Server 2005和之前的版本,頁鎖會直接升級到表鎖。
在SQL Server 2005或SQL Server 2008,你可以通過如下跟蹤標志改變鎖升級的行為:
標志1211-完全禁止鎖升級,但鎖使用的內存會被限制在動態(tài)分配內存的60%,當超過這個值時,更多的鎖將會伴隨著內存溢出錯誤而失敗。
在SQL Server 2008中,還可以以表為單位進行鎖行為的設置,可以通過ALTER TABLE blah SET (LOCK_ESCALATION = XXX),在這個命令中XXX所代表的是下面幾項中的一項:
TABLE: 直接從行鎖升級到表鎖。
錯誤
實際不是,在SQL Server 2005和之前的版本,頁鎖會直接升級到表鎖。
在SQL Server 2005或SQL Server 2008,你可以通過如下跟蹤標志改變鎖升級的行為:
標志1211-完全禁止鎖升級,但鎖使用的內存會被限制在動態(tài)分配內存的60%,當超過這個值時,更多的鎖將會伴隨著內存溢出錯誤而失敗。
- 標志1224-禁止鎖升級,但內存使用超過40%時,會自動開啟鎖升級
在SQL Server 2008中,還可以以表為單位進行鎖行為的設置,可以通過ALTER TABLE blah SET (LOCK_ESCALATION = XXX),在這個命令中XXX所代表的是下面幾項中的一項:
TABLE: 直接從行鎖升級到表鎖。
- AUTO:如果存在表分區(qū),則升級為分區(qū)鎖,但不會進一步升級。
- DISABLE:禁用鎖升級,這并不意味著禁用表鎖,就像BOL(Books Online entry)中所說,在序列化隔離等級的條件下進行表掃描等操作時還需要表鎖。
在2008年1月的時候,我寫了一篇包含分區(qū)鎖例子的博文,請看:SQL Server 2008: Partition-level lock escalation details and examples。
或許你會想為什么LOCK_ESCALATION = XXX設置中AUTO不是默認值,這時因為早期測試中某些人發(fā)現(xiàn)這個選項更容易引起死鎖。就像對于上述兩個有關鎖的跟蹤標記一樣,對于這個選項設置為AUTO也同樣需要謹慎。
相關文章
MS SQL Server2014鏈接到MS SQL Server 2000的解決方案及問題處理
在大數據中,我們經常需要用到分布式數據,那么在SqlServer中,我們如何來實現(xiàn)呢,答案就是創(chuàng)建鏈接服務器!同版本的SqlServer之間的操作網上有很多,今天我們來探討下不同版本SqlServer之間的鏈接問題。2014-07-07
做購物車系統(tǒng)時利用到得幾個sqlserver 存儲過程
最近使用asp.net+sql2000開始開發(fā)一個小型商城系統(tǒng),其中涉及到得購物車功能主要是仿照淘寶實現(xiàn)的.2009-12-12

