Параметры конфигурации памяти сервера

Область применения: yesSQL Server (все поддерживаемые версии)

Использование памяти для ядра СУБД SQL Server ограничивается парой параметров конфигурации, min server memory (MB) (минимальный объем памяти сервера в МБ) и max server memory (MB) (максимальный объем памяти сервера в МБ). Со временем и в обычных обстоятельствах SQL Server попытается запросить память до предела, установленного параметром max server memory (MB).

Примечание

Индексы columnstore и объекты выполняющейся в памяти OLTP имеют собственные клерки памяти, что упрощает мониторинг использования буферного пула. Дополнительные сведения см. в статье sys.dm_os_memory_clerks.

В более ранних версиях SQL Server использование памяти практически не было ограничено, указывая для SQL Server, что вся системная память доступна для использования. Во всех версиях SQL Server рекомендуется настроить верхний предел использования памяти SQL Server, указав параметр max server memory (MB).

  • Начиная с SQL Server 2019 (15.x) программа установки SQL на серверах Windows предоставляет рекомендации по значению max server memory (MB) для автономного экземпляра SQL Server на основе процента доступной системной памяти во время установки.
  • В любое время можно перенастроить ограничения памяти (в мегабайтах) для процесса SQL Server, используемого экземпляром SQL Server, с помощью параметров конфигурации min server memory (MB) и max server memory (MB).

Примечание

Это руководство относится к экземпляру SQL Server в Windows. Сведения о конфигурации памяти в Linux см. в разделах Рекомендации по повышению производительности и конфигурации для SQL Server в Linux и Параметр memory.memorylimitmb.

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

Параметры по умолчанию и минимальное допустимое значение для этих параметров

Параметр По умолчанию Допустимый минимум Рекомендуемая
min server memory (MB) 0 0 0
max server memory (MB) 2 147 483 647 мегабайт (МБ) 128 МБ 75 % доступной системной памяти, не потребляемой другими процессами, включая другие экземпляры. Более подробные рекомендации см. в разделе о максимальном объеме памяти сервера.

В этих границах SQL Server может динамически изменять требования к памяти в зависимости от доступных системных ресурсов. Дополнительные сведения см. в разделе Управление динамической памятью.

  • Если вы зададите слишком высокое значение max server memory (MB), одному экземпляру SQL Server, возможно, придется конкурировать за память с другими экземплярами SQL Server, размещенными на том же узле.
  • Однако если установить слишком маленькое значение max server memory (MB), это не позволит увеличить производительность и может привести к проблемам с нехваткой памяти и производительностью в экземпляре SQL Server.
  • Если присвоить параметру max server memory (MB) минимальное значение, SQL Server может не запуститься. Если не удается запустить SQL Server после изменения этого параметра, запустите его с использованием параметра запуска -f и установите для параметра max server memory (MB) предыдущее значение. Дополнительные сведения см. в разделе Параметры запуска службы Database Engine.
  • Не рекомендуется устанавливать для параметров max server memory (MB) и min server memory (MB) одинаковые или почти одинаковые значения.

SQL Server может использовать память динамически. Но можно установить параметры памяти вручную и ограничить объем памяти, доступный для SQL Server. Перед настройкой объема памяти для SQL Server определите подходящее значение путем вычитания из общего объема физической памяти того объема, который требуется операционной системе, выделениям памяти, не управляемым параметром max server memory (MB), и другим экземплярам SQL Server (и для других нужд, если на сервере размещены другие приложения, потребляющие память, включая другие экземпляры SQL Server). Разница — максимальный объем памяти, который можно выделить текущему экземпляру SQL Server.

Для всех выпусков SQL Server память можно выделять вплоть до предела виртуального адресного пространства процесса. Дополнительные сведения см. в разделе Предельный объем памяти для выпусков Windows и Windows Server.

Минимальный объем памяти сервера

Параметр min server memory (MB) используется для гарантированного предоставления минимального объема памяти, доступного диспетчеру памяти SQL Server.

  • SQL Server не выделяет объем памяти, указанный в параметре min server memory (MB), сразу после запуска. Тем не менее, когда это значение достигается с ростом рабочей нагрузки, экземпляр SQL Server не может освободить память, если не уменьшить значение параметра min server memory (MB). Например, если на одном сервере установлено несколько экземпляров SQL Server, задайте параметр min server memory (MB), чтобы зарезервировать память для экземпляра.

  • Кроме того, необходимо задать значение min server memory (MB) в виртуализированной среде, чтобы гарантировать, что при дефиците памяти на базовом узле не будет попыток выделить больше памяти из буферного пула в гостевой виртуальной машине, чем это необходимо для приемлемой производительности. В идеале экземпляры SQL Server на виртуальной машине не должны конкурировать с процессами упреждающего распределения памяти на виртуальном узле.

  • SQL Server не гарантирует, что объем памяти, заданный параметром min server memory (MB), будет выделен. Если нагрузка на сервер никогда не требует выделения всего объема памяти, заданного параметром min server memory (MB), сервер SQL Server будет использовать меньше памяти.

Max server memory

Используйте параметр max server memory (MB), чтобы гарантировать, что операционная система и другие приложения не пострадают от нехватки памяти в SQL Server.

  • Перед настройкой конфигурации max server memory (MB) отслеживайте общее потребление памяти сервера, на котором размещен экземпляр SQL Server, во время нормальной работы, чтобы определить доступность и требования к памяти. Для исходной настройки или при отсутствии возможности получения сведений об использовании памяти процессом SQL Server с течением времени используйте следующий обобщенный подход к настройке значения max server memory (MB) для одного экземпляра:
    • Из значения общего объема памяти ОС вычтите эквивалент потенциального выделения памяти потоков SQL Server сверх значения max server memory (MB) (вычисляется так: размер стека 1 × вычисляемое максимальное число рабочих потоков2).
    • Затем вычтите 25 % для других выделений памяти вне элемента управления max server memory (MB), например для буферов резервного копирования, библиотек DLL расширенных хранимых процедур, объектов, созданных с помощью процедур автоматизации (вызовов sp_OA), и выделений от поставщиков связанных серверов. Это обобщенное значение, которое может отличаться.
    • Остаток и даст значение параметра max server memory (MB) в случае установки одного экземпляра.

1 Сведения о размерах стеков потока для различных архитектур см. в разделе Руководство по архитектуре управления памятью.

2 Сведения о вычислении рабочих потоков по умолчанию для заданного числа сходных ЦП на текущем узле см. в разделе Настройка параметра конфигурации сервера "Максимальное число рабочих потоков".

Задать параметры вручную

Можно установить для параметров сервера min server memory (MB) и max server memory (MB) значения, покрывающие весь доступный объем памяти. Этот метод полезен для системных администраторов или администраторов баз данных, когда требуется настроить экземпляр SQL Server так, чтобы его параметры не противоречили требованиям к памяти других приложений или других экземпляров SQL Server, запущенных на этом узле.

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

Параметры min server memory (MB) и max server memory (MB) являются расширенными. При использовании системной хранимой процедуры sp_configure для изменения этих настроек изменить их можно, только если параметр show advanced options установлен в значение 1. Эти параметры вступают в силу сразу же без перезагрузки сервера. Дополнительные сведения: sp_configure.

В следующем примере для параметра max server memory (MB) устанавливается значение 12 288 МБ, или 12 ГБ. Хотя sp_configure указывает имя параметра как max server memory (MB), можно опустить (MB).

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'max server memory', 12288;
GO
RECONFIGURE;
GO

Следующий запрос возвращает сведения о настроенных значениях и значении, которое сейчас используется. Этот запрос возвратит результаты независимо от того, включен ли параметр sp_configure "show advanced options".

SELECT [name], [value], [value_in_use]
FROM sys.configurations
WHERE [name] = 'max server memory (MB)' OR [name] = 'min server memory (MB)';

Используйте SQL Server Management Studio.

Используйте параметры min server memory (MB) и max server memory (MB) для настройки объема памяти (в мегабайтах), которая находится в управлении диспетчера памяти SQL Server для экземпляра SQL Server.

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

  2. Выберите страницу Память окна Свойства сервера. Отображаются текущие значения минимального объема памяти сервера и максимального объема памяти сервера.

  3. В разделе Параметры памяти сервера введите требуемые значения для параметров минимального объема памяти сервера и максимального объема памяти сервера. Рекомендации см. в разделе min server memory (MB) и max server memory (MB) в этой статье.

На следующем снимке экрана показаны все три шага:

Снимок экрана: варианты конфигурации памяти в SSMS.

Блокировка страниц в памяти (LPIM)

Эта политика Windows определяет, какие учетные записи могут получать доступ к API для сохранения данных в физической памяти, чтобы система не отправляла страницы данных в виртуальную память на диске. Блокировка страниц в памяти может обеспечивать отклик сервера, когда содержимое памяти заносится в файл подкачки. Для параметра Блокировка страниц в памяти указывается значение enabled в экземплярах выпуска SQL Server Standard и выше, если учетной записи с привилегией на выполнение sqlservr.exe предоставлено право пользователя Windows Блокировка страниц в памяти (LPIM).

Чтобы отключить параметр Блокировка страниц в памяти для SQL Server, удалите право пользователя Блокировка страниц в памяти у учетной записи с привилегиями для запуска sqlservr.exe (стартовой учетной записи SQL Server).

Использование LPIM не влияет на динамическое управление памятью в SQL Server, что позволяет расширить или сузить ее по запросу других клерков памяти. При использовании пользовательского права Блокировка страниц в памяти рекомендуется задать верхний предел для параметра max server memory (MB). См. дополнительные сведения о параметре max server memory (MB).

LPIM следует использовать при наличии признаков того, что процесс sqlservr вытесняется из памяти. В этом случае в журнале ошибок появится ошибка 17890, как в примере ниже: .

A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: #### seconds. Working set (KB): ####, committed (KB): ####, memory utilization: ##%.

Использование LPIM с неправильно настроенным параметром max server memory (MB), в котором не учтены другие потребители памяти в системе, может привести к нестабильной работе. Это зависит от объема памяти, требуемого для других процессов? или требований к памяти SQL Server вне параметра max server memory (MB). См. дополнительные сведения о max server memory. Если предоставляется разрешение на блокировку страниц в памяти (LPIM) (в 32-разрядных или 64-разрядных системах), настоятельно рекомендуется задать параметр max server memory (MB), а не оставлять значение по умолчанию, равное 2 147 483 647 МБ.

Примечание

Начиная с SQL Server 2012 (11.x), флаг трассировки 845 не требуется для использования заблокированных страниц в выпуске Standard Edition.

Включение параметра Блокировка страниц в памяти

Если вы изучили предыдущие сведения и хотите включить параметр Блокировка страниц в памяти, предоставив это разрешение учетной записи службы для экземпляра SQL Server, см. раздел Включение параметра "Блокировка страниц в памяти" (Windows).

Чтобы определить учетную запись службы для экземпляра SQL Server, обратитесь к диспетчеру конфигурации SQL Server или запросите service_account из sys.dm_server_services. Для получения дополнительной информации см. sys.dm_server_services (Transact-SQL).

Просмотр статуса Блокировка страниц в памяти

Чтобы определить, предоставлено ли учетной записи службы разрешение Блокировка страниц в памяти для экземпляра SQL Server, используйте следующий запрос. Этот запрос поддерживается в SQL Server 2016 (13.x) с пакетом обновления 1 (SP1) и более поздних версий.

SELECT sql_memory_model_desc FROM sys.dm_os_sys_info;

Следующие значения sql_memory_model_desc указывают состояние LPIM:

  • CONVENTIONAL. Разрешение "Блокировка страниц в памяти" не предоставлено.
  • LOCK_PAGES. Разрешение "Блокировка страниц в памяти" предоставлено.
  • LARGE_PAGES. Разрешение "Блокировка страниц в памяти" предоставляется в режиме предприятия с включенным флагом трассировки 834. Это расширенная конфигурация, которая не рекомендуется для большинства сред. Дополнительные сведения и важные рекомендации см. в разделе Флаг трассировки 834.

Несколько экземпляров SQL Server

При выполнении нескольких экземпляров компонента ядра СУБД существует несколько подходов к управлению памятью:

  • Используйте параметр max server memory (MB), чтобы управлять использованием памяти, как описано выше. Установите максимальные значения для каждого экземпляра, учитывая, что их сумма не должна превышать общий объем физической памяти, установленной на компьютере. Рекомендуется выделять каждому экземпляру объем памяти, пропорциональный его ожидаемой рабочей нагрузке или размеру базы данных. Данный подход имеет то преимущество, что свободная память доступна новым процессам или экземплярам сразу же после их запуска. Недостаток в том, что, когда выполняются не все экземпляры, ни один из выполняющихся экземпляров не сможет использовать память, оставшуюся свободной.

  • Используйте параметр min server memory (MB), чтобы управлять использованием памяти, как описано выше. Установите минимальные значения для каждого экземпляра так, чтобы их сумма была на 1–2 ГБ меньше общего объема физической памяти, установленной на компьютере. Рекомендуется выделять каждому экземпляру минимальный объем памяти, пропорциональный его ожидаемой рабочей нагрузке. Данный подход имеет то преимущество, что выполняющиеся экземпляры могут использовать оставшуюся свободную память в случае, когда выполняются не все экземпляры. Данный подход также полезен, когда на компьютере выполняется другой процесс, интенсивно потребляющий память, так как при этом SQL Server по крайней мере будет получать достаточно памяти. Недостаток состоит в том, что при запуске нового экземпляра (или любого другого процесса) уже выполняющимся экземплярам требуется некоторое время для освобождения памяти, особенно если для этого им необходимо записать измененные страницы обратно в базу данных.

  • Используйте параметры max server memory (MB) и min server memory (MB) в каждом экземпляре для управления использованием памяти, наблюдения и настройки максимального использования каждого экземпляра, а также защиты минимального объема памяти в широком диапазоне возможных уровней использования памяти.

  • Отсутствие действий (не рекомендуется). Первый экземпляр, столкнувшийся с рабочей нагрузкой, попытается захватить всю память. Простаивающие экземпляры или экземпляры, запущенные позже других, могут в конечном итоге быть вынуждены работать лишь с минимальным доступным объемом памяти. SQL Server не пытается равномерно распределять возможности использования памяти между экземплярами. Тем не менее все экземпляры будут реагировать на сигналы уведомлений памяти Windows, корректируя объемы используемой ими памяти. Операционная система Windows не балансирует память между приложениями с помощью API уведомлений о памяти. Эти уведомления лишь обеспечивают глобальную обратную связь относительно доступности памяти в системе.

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

Примеры

A. Задание для параметра max server memory значения 4 ГБ

В следующем примере для параметра max server memory (MB) устанавливается значение 4096 МБ, или 4 ГБ. Хотя sp_configure указывает имя параметра как max server memory (MB), можно опустить (MB).

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'max server memory', 4096;
GO
RECONFIGURE;
GO

В результате вы получите инструкцию, аналогичную Configuration option 'max server memory (MB)' changed from 2147483647 to 4096. Run the RECONFIGURE statement to install. Новое ограничение памяти вступает в силу сразу после выполнения RECONFIGURE. Дополнительные сведения: sp_configure.

Б. Определение текущего распределения памяти

Следующий запрос возвращает информацию о текущем распределении памяти.

SELECT
  physical_memory_in_use_kb/1024 AS sql_physical_memory_in_use_MB,
   large_page_allocations_kb/1024 AS sql_large_page_allocations_MB,
   locked_page_allocations_kb/1024 AS sql_locked_page_allocations_MB,
   virtual_address_space_reserved_kb/1024 AS sql_VAS_reserved_MB,
   virtual_address_space_committed_kb/1024 AS sql_VAS_committed_MB,
   virtual_address_space_available_kb/1024 AS sql_VAS_available_MB,
   page_fault_count AS sql_page_fault_count,
   memory_utilization_percentage AS sql_memory_utilization_percentage,
   process_physical_memory_low AS sql_process_physical_memory_low,
   process_virtual_memory_low AS sql_process_virtual_memory_low
FROM sys.dm_os_process_memory;

В. Просмотр значения max server memory (MB)

Следующий запрос возвращает сведения о настроенном сейчас значении и используемом значении. Этот запрос возвратит результаты независимо от того, включен ли параметр sp_configure "show advanced options".

SELECT [value], [value_in_use]
FROM sys.configurations WHERE [name] = 'max server memory (MB)';

Дальнейшие действия