Параметр locks
Используйте параметр locks, чтобы установить максимальное количество доступных блокировок, таким образом ограничивая объем памяти, используемой компонентом Database Engine для них. Значение 0 (по умолчанию) позволяет компоненту Database Engine динамически выделять и освобождать структуры блокировок в зависимости от изменяющихся системных требований.
Когда сервер запускается с параметром locks, установленным в 0, диспетчер блокировок запрашивает у компонента Database Engine объем памяти, достаточный для начального пула в 2 500 структур блокировки. Если пул блокировки будет исчерпан, для пула будет запрошена дополнительная память.
Вообще, если требуется больше памяти, чем доступно для пула блокировки в пуле памяти компонента Database Engine, и больше компьютерной памяти доступно (порог максимальная память сервера не был достигнут), компонент Database Engine динамически распределяет память, чтобы удовлетворить потребности запроса блокировок. Однако, если распределение этой памяти вызовет подкачку страниц на уровне операционной системы (например, если другое приложение выполняется на том же самом компьютере как экземпляр SQL Server и использует эту память), большего объема пространства для блокировки не будет выделено. Динамический пул блокировки не получит больше чем 60 процентов памяти, выделенной для компонента Database Engine. После того как пул блокировки достигнет 60 процентов памяти, запрошенной экземпляром компонента Database Engine, или выяснится, что на компьютере нет больше доступной памяти, последующие запросы блокировок будут формировать ошибку.
Рекомендуется разрешить SQL Server динамически использовать блокировки. Однако можно установить параметр locks и отключить динамическое распределение ресурсов блокировок SQL Server. Когда параметр locks имеет значение, отличное от 0, компонент Database Engine не может распределить больше блокировок, чем указано в этом параметре. Увеличьте это значение, если SQL Server отображает сообщение о том, что превышено количество доступных блокировок. Поскольку каждая блокировка занимает память (96 байт на блокировку), увеличение этого значения может потребовать увеличения объема памяти, выделенной для сервера.
Параметр locks также оказывает влияние при укрупнении блокировки. Когда параметр locks установлен в 0, укрупнение блокировки происходит тогда, когда память, используемая текущими структурами блокировки, достигает 40 процентов от пула памяти компонента Database Engine. Если параметр locks установлен не в 0, укрупнение блокировки происходит, когда количество блокировок достигает 40 процентов от значения, указанного для параметра locks.
Параметр locks является дополнительным параметром. При использовании системной хранимой процедуры sp_configure для изменения этой настройки параметр locks можно изменить, только если параметр show advanced options установлен в 1. Настройка вступает в силу после перезапуска сервера.
На компьютерах, использующих неоднородный доступ к памяти (NUMA), параметр locks настраивается для каждого узла 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)