SQL Server有關鎖升級的誤區說明

piny發表於2021-09-09

鎖升級的過程是由行鎖升級到頁鎖,再由頁鎖升級到表鎖錯誤

    實際不是,在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)中所說,在序列化隔離等級的條件下進行表掃描等操作時還需要表鎖。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3034/viewspace-2808843/,如需轉載,請註明出處,否則將追究法律責任。

相關文章