Конфигурация сервера: блокировки

Область применения:SQL Server

В этой статье описывается настройка locks параметра конфигурации сервера в SQL Server с помощью SQL Server Management Studio или Transact-SQL. Параметр locks задает максимальное количество доступных блокировок, тем самым ограничивая объем памяти, используемой компонентом Database Engine SQL Server для их хранения. Значение по умолчанию равно 0, что позволяет ядро СУБД динамически выделять и освобождать структуры блокировки на основе изменяющихся системных требований.

Внимание

Эта функция будет удалена в будущей версии SQL Server. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется.

Рекомендации

Этот параметр является дополнительным вариантом и должен быть изменен только опытным специалистом по базе данных.

Если сервер запускается со значением 0 для параметра locks, диспетчер блокировок получает от ядра СУБД объём памяти, достаточный для начального пула из 2 500 структур блокировок. По мере исчерпания пула блокировок для него выделяется дополнительная память.

Как правило, если для пула блокировок требуется больше памяти, чем доступно в пуле памяти ядра СУБД, и доступен больший объём памяти компьютера (пороговое значение max server memory (MB) ещё не достигнуто), ядро СУБД динамически выделяет память для выполнения запроса на блокировки. Однако если выделение памяти приведет к разбиению на страницы на уровне операционной системы (например, если другое приложение работает на том же компьютере, что и экземпляр SQL Server и использует ее), больше места блокировки не выделяется. Динамический пул блокировок не использует более 60 % памяти, выделенной компоненту ядро СУБД. После того как пул блокировок достигает 60 % объема памяти, выделенной экземпляру ядра СУБД, или на компьютере больше нет доступной памяти, дальнейшие запросы на блокировку приводят к возникновению ошибки.

Рекомендуемая конфигурация — разрешить SQL Server динамически использовать блокировки. Однако можно задать locks и переопределить возможность SQL Server динамически выделять ресурсы блокировки. Если параметр locks имеет значение, отличное от 0, компонент ядро СУБД не может выделить больше блокировок, чем указано в locks. Увеличьте это значение, если SQL Server выводит сообщение о том, что превышено количество доступных блокировок. Так как каждая блокировка занимает память (96 байт на блокировку), увеличение этого значения может потребовать увеличения объема памяти, выделенной для сервера.

Этот locks параметр также влияет на ситуацию, когда происходит эскалация блокировки. Если для locks задано значение 0, эскалация блокировок происходит, когда объем памяти, используемой текущими структурами блокировок, достигает 40 % пула памяти компонента ядро СУБД. Если значение locks не равно 0, происходит эскалация блокировок, когда число блокировок достигает 40 процентов от значения, указанного для locks.

Разрешения

Разрешения на выполнение для sp_configure без параметров или только с первым параметром предоставляются всем пользователям по умолчанию. Чтобы выполнить sp_configure с обоими параметрами, чтобы изменить параметр конфигурации или выполнить инструкцию RECONFIGURE, пользователю должно быть предоставлено разрешение уровня сервера ALTER SETTINGS. Разрешение ALTER SETTINGS неявным образом предоставлено предопределенным ролям сервера sysadmin и serveradmin.

Использование SQL Server Management Studio

  1. В обозревателе объектов щелкните правой кнопкой мыши сервер и выберите пункт Свойства.

  2. Выберите узел Дополнительно.

  3. В разделе Parallelism введите требуемое значение параметра locks .

    locks Используйте параметр, чтобы задать максимальное количество доступных блокировок, которое ограничивает объем памяти SQL Server, используемой для них.

Использование Transact-SQL

  1. Подключиться к компоненту ядро СУБД.

  2. На стандартной панели выберите пункт Создать запрос.

  3. Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить. В этом примере описывается использование процедуры sp_configure для присвоения параметру locks значения, позволяющего установить число блокировок, доступных всем пользователям, равным 20000.

    USE master;
    GO
    
    EXECUTE sp_configure 'show advanced options', 1;
    GO
    
    RECONFIGURE;
    GO
    
    EXECUTE sp_configure 'locks', 20000;
    GO
    
    RECONFIGURE;
    GO
    
    EXECUTE sp_configure 'show advanced options', 0;
    GO
    
    RECONFIGURE;
    GO
    

Дополнительные сведения см. в разделе "Параметры конфигурации сервера".

Дальнейшие действия. После настройки параметра блокировки

Чтобы изменения вступили в силу, необходимо перезапустить сервер.