Конфигурация сервера: максимальный объем памяти кэша диспетчера блокировки (%)

Применимо к: SQL Server 2025 (17.x) и более поздних версий

Параметр max lock manager cache memory (%) конфигурации сервера ограничивает объем памяти, которую кэш диспетчера блокировки может использовать в процентах от общего объема зафиксированной памяти SQLOS. По умолчанию для конфигурации задано значение 20 %.

Availability

Этот параметр конфигурации доступен на следующих платформах и версиях SQL:

  • SQL Server 2025 (17.x) Накопительное обновление 5 (CU 5) и более поздние версии

Remarks

При освобождении блокировки память, используемая структурой блокировки, не освобождается, но кэшируется диспетчером блокировки, чтобы избежать затрат на выделение памяти при последующем приобретении блокировки и повышения производительности.

До SQL Server 2025 (17.x) CU 5, а также в предыдущих версиях SQL Server, кэш диспетчера блокировок может увеличиваться до максимального размера памяти диспетчера блокировок, который составляет 60 % от общего объема выделенной памяти SQLOS. Рабочая нагрузка может увеличить размер кэша диспетчера блокировки до этого предела. Например, такая редкая ситуация может возникнуть в условиях высокой нагрузки, вызванной большим числом параллельно выполняемых запросов, когда для экземпляра ядра СУБД отключена эскалация блокировок. Если кэш диспетчера блокировок становится слишком большим, буферный пул, кэш планов и другие кэши памяти экземпляра SQL Server уменьшаются, что снижает производительность.

В SQL Server 2025 (17.x) CU 5 и более поздних версий максимальный размер кэша диспетчера блокировки по умолчанию ограничен 20 процентами. Память менеджера блокировок по-прежнему может увеличиваться до 60 процентов выделенной памяти SQLOS, если это требуется рабочей нагрузкой. Однако при освобождении блокировок память освобождается, а не кэшируется, если кэш диспетчера блокировки уже достиг заданного предела.

Устанавливать для конфигурации max lock manager cache memory (%) значение более 20 % не рекомендуется, но это поддерживается для обеспечения обратной совместимости. Можно задать значение в диапазоне от 20 до 60 процентов.

Общий объем памяти диспетчера блокировок можно отслеживать с помощью sys.dm_os_memory_clerks, где OBJECTSTORE_LOCK_MANAGER — это тип диспетчера памяти. Для неактивного экземпляра компонента Database Engine сообщаемое значение представляет собой размер памяти кэша диспетчера блокировок.

Examples

А. Задайте максимальный размер памяти кэша диспетчера блокировки

В следующем примере максимальный объем памяти кэша диспетчера блокировки составляет 25 процентов:

EXECUTE sp_configure 'show advanced options', 1;
RECONFIGURE;

EXECUTE sp_configure 'max lock manager cache memory (%)', 25;
RECONFIGURE;

B. Мониторинг памяти диспетчера блокировок

В следующем примере показан текущий размер памяти диспетчера блокировки. Это значение включает память, занимаемую удерживаемыми блокировками, если таковые имеются, а также кэшированную память для повышения производительности последующих операций захвата блокировок.

SELECT SUM(pages_kb) / 1024. AS lock_manager_cache_memory_mb
FROM sys.dm_os_memory_clerks
WHERE type = 'OBJECTSTORE_LOCK_MANAGER';