SQL Server誤區30日談 第23天 有關鎖進級的誤區。本站提示廣大學習愛好者:(SQL Server誤區30日談 第23天 有關鎖進級的誤區)文章只能為提供參考,不一定能成為您想要的結果。以下是SQL Server誤區30日談 第23天 有關鎖進級的誤區正文
誤區 #23: 鎖進級的進程是由行鎖進級到頁鎖,再由頁鎖進級到表鎖
毛病
現實不是,在SQL Server 2005和之前的版本,頁鎖會直接進級到表鎖。
在SQL Server 2005或SQL Server 2008,你可以經由過程以下跟蹤標記轉變鎖進級的行動:
標記1211-完整制止鎖進級,但鎖應用的內存會被限制在靜態分派內存的60%,當跨越這個值時,更多的鎖將會隨同著內存溢失足誤而掉敗。
- 標記1224-制止鎖進級,但內存應用跨越40%時,會主動開啟鎖進級
假如標記1211和1224跟蹤標記同時被設置了,只要標記1211會失效。更具體的內容請看Books Online。
在SQL Server 2008中,還可以以表為單元停止鎖行動的設置,可以經由過程ALTER TABLE blah SET (LOCK_ESCALATION = XXX),在這個敕令中XXX所代表的是上面幾項中的一項:
TABLE: 直接從行鎖進級到表鎖。
- AUTO:假如存在表分區,則進級為分區鎖,但不會進一步進級。
- DISABLE:禁用鎖進級,這其實不意味著禁用表鎖,就像BOL(Books Online entry)中所說,在序列化隔離品級的前提下停止表掃描等操作時還須要表鎖。
在2008年1月的時刻,我寫了一篇包括分區鎖例子的博文,請看:SQL Server 2008: Partition-level lock escalation details and examples。
也許你會想為何LOCK_ESCALATION = XXX設置中AUTO不是默許值,這時候由於晚期測試中某些人發明這個選項更輕易惹起逝世鎖。就像關於上述兩個有關鎖的跟蹤標志一樣,關於這個選項設置為AUTO也異樣須要謹嚴。