Share via


locks 選項

使用 locks 選項來設定可用鎖定的最大數目,從而限制 Database Engine 用於鎖定的記憶體數量。預設值為 0,允許 Database Engine 根據變更系統需求,動態配置與取消配置鎖定結構。

如果伺服器啟動時是將 locks 設為 0,則鎖定管理員會從 Database Engine 取得足夠的記憶體,以供 2,500 個鎖定結構的初始集區使用。當鎖定集區耗盡時,就會再為集區取得額外的記憶體。

一般而言,如果鎖定集區所需的記憶體多於 Database Engine 記憶體集區可提供的數量,而且還有更多的電腦記憶體可用 (尚未達到**「最大伺服器記憶體」**臨界值) 的話,Database Engine 會動態配置記憶體,以滿足鎖定要求。然而,如果配置記憶體會造成作業系統層級的分頁 (例如,如果在與 SQL Server 執行個體同一部電腦上執行的另一個應用程式正在使用該記憶體),就無法再配置鎖定空間。動態鎖定集區所取得的記憶體,不會超過 Database Engine 配置記憶體的 60%。當鎖定集區達到 Database Engine 執行個體 所取得之記憶體量的 60%,或電腦上沒有多餘的記憶體可用時,之後的鎖定要求都會產生錯誤。

讓 SQL Server 能夠動態地使用鎖定是建議的設定。但是,您可以設定 locks,並覆寫 SQL Server 動態配置鎖定資源的功能。當 locks 設為 0 以外的數值時,Database Engine 所能配置的鎖定,無法超過 locks 中指定的值。如果 SQL Server 顯示訊息表示已超過可用的鎖定個數,就應增加這個值。因為每個鎖定都會消耗記憶體 (每個鎖定 96 位元組),所以增加這個值可增加伺服器專用的記憶體大小。

鎖定擴大發生時,也會使 locks 選項受到影響。locks 設為 0 時,鎖定擴大會在目前的鎖定結構所用的記憶體達到 Database Engine 記憶體集區的 40% 時發生。locks 未設為 0 時,鎖定擴大會在鎖定個數達到 locks 指定數值的 40% 時發生。

locks 屬於進階選項。若使用 sp_configure 系統預存程序來變更該設定,只有當 show advanced options 設為 1 時,才可以變更 locks。這個設定會在伺服器重新啟動後立即生效。

在使用非統一記憶體存取 (NUMA) 的電腦上,鎖定設定是透過 NUMA 節點,因此,在四個節點的電腦上設定 10,000 可以允許 40,000 個鎖定。使用下列查詢,可以決定 NUMA 節點的數目:

SELECT COUNT(DISTINCT parent_node_id)
FROM sys.dm_os_schedulers 
WHERE parent_node_id <> 32

請參閱

概念

鎖定與資料列版本控制
鎖定擴大 (Database Engine)
設定伺服器組態選項

其他資源

RECONFIGURE (Transact-SQL)
sp_configure (Transact-SQL)

說明及資訊

取得 SQL Server 2005 協助