Параметры конфигурации памяти сервера
Измените объем памяти (в мегабайтах) для процесса SQL Server, используемого экземпляром SQL Server. Существует два параметра использовании серверной памяти: Мин. память сервера и Макс. память сервера. Эти параметры меняют объем памяти, выделяемой диспетчером SQL Server Memory Manager процессам SQL Server.
Параметры по умолчанию и минимальное допустимое значение для этих параметров
Параметр По умолчанию Минимально допустимое min server memory 0 0 max server memory 2 147 483 647 мегабайт (МБ) 128 МБ
По умолчанию SQL Server может динамически изменять требования к памяти в зависимости от доступных системных ресурсов. Дополнительные сведения см. в разделе Управление динамической памятью.
Если вы зададите слишком высокое значение макс. памяти сервера одному экземпляру SQL Server, возможно, придется конкурировать с другими экземплярами SQL Server, размещенными на том же узле, за память. Если же задать слишком низкое значение, может возникнуть значительный дефицит памяти или проблемы с производительностью. Если присвоить параметру Макс. памяти сервера минимальное значение, SQL Server может не запуститься. Если не удается запустить SQL Server после изменения этого параметра, запустите его с использованием параметра запуска -f и верните параметр max server memory к предыдущему значению. Дополнительные сведения см. в разделе Параметры запуска службы Database Engine.
SQL Server может использовать память динамически; но можно установить параметры памяти вручную и ограничить объем памяти, доступный для SQL Server. Перед настройкой объема памяти для SQL Server определите подходящее значение путем вычитания из общего объема физической памяти того объема, который требуется операционной системе, выделениям памяти, не управляемым параметром max_server_memory, и другим экземплярам SQL Server (и для других нужд, если компьютер не выделен полностью под сервер SQL Server). Разница — максимальный объем памяти, который можно выделить текущему экземпляру SQL Server.
Задать параметры вручную
Можно установить для параметров сервера Мин. памяти сервера и Макс. памяти сервера значения, покрывающие весь доступный объем памяти. Этот метод полезен для системных администраторов или администраторов баз данных, когда требуется настроить экземпляр SQL Server так, чтобы его параметры не противоречили требованиям к памяти других приложений или других экземпляров SQL Server, запущенных на этом узле.
Параметры min server memory и max server memory являются расширенными. При использовании системной хранимой процедуры sp_configure для изменения этих настроек изменить их можно, только если параметр show advanced options установлен в значение 1. Эти параметры вступают в силу сразу же без перезагрузки сервера.
Параметр min_server_memory используется для гарантированного предоставления минимального объема памяти, доступного диспетчеру памяти SQL Server для экземпляра SQL Server. SQL Server не выделяет немедленно объем памяти, указанный в параметре min server memory , после запуска. Тем не менее, когда это значение достигается с ростом рабочей нагрузки, экземпляр SQL Server не может освободить память, выделенную буферному пулу, если не уменьшить значение параметра min server memory . Например, если на одном узле может находиться сразу несколько экземпляров SQL Server, задайте параметр min_server_memory вместо max_server_memory, чтобы зарезервировать память для экземпляра. Кроме того, необходимо задать значение min_server_memory в виртуализированной среде, чтобы гарантировать, что при дефиците памяти на базовом узле не будет попыток выделить больше памяти из буферного пула в гостевой виртуальной машине SQL Server, чем это необходимо для приемлемой производительности.
SQL Server не гарантирует, что объем памяти, заданный параметром min server memory, будет выделен. Если нагрузка на сервер никогда не требует выделения всего объема памяти, заданного параметром min server memory, сервер SQL Server будет использовать меньше памяти.
Параметр max_server_memory гарантирует, что в ОС не возникнет дефицит памяти. Чтобы задать конфигурацию "Макс. памяти сервера", отследите общее использование памяти процессом SQL Server и определите требования к памяти. Для исходной настройки или при отсутствии возможности получения сведений об использовании памяти процессом SQL Server с течением времени используйте следующий обобщенный подход к настройке значения max server memory для одного экземпляра.
- Из значения общего объема памяти ОС вычтите эквивалент потенциального выделения памяти потока SQL Server, которое превышает значение max server memory (вычисляется так: размер стека 1 * вычисляемое максимальное число рабочих потоков 2 ).
- Затем вычтите 25 % для других выделений памяти вне элемента управления max server memory, например для буферов резервного копирования, библиотек DLL расширенных хранимых процедур, объектов, созданных с помощью процедур автоматизации (вызовов sp_OA), и выделений от поставщиков связанных серверов. Это обобщенное значение, которое может отличаться.
- Остаток и даст значение параметра max_server_memory в случае установки одного экземпляра.
1 Сведения о размерах стеков потока для различных архитектур см. в разделе Руководство по архитектуре управления памятью.
2 Сведения о вычислении рабочих потоков по умолчанию для заданного числа сходных ЦП на текущем узле см. в разделе Настройка параметра конфигурации сервера "Максимальное число рабочих потоков".
Используйте SQL Server Management Studio.
Используйте два параметра памяти сервера, Мин. памяти сервера и Макс. памяти сервера, для настройки объема памяти (в мегабайтах), находящейся в управлении диспетчера памяти SQL Server для экземпляра SQL Server. По умолчанию SQL Server может динамически изменять требования к памяти в зависимости от доступных системных ресурсов.
Настройка фиксированного объема памяти (не рекомендуется)Установка фиксированного размера памяти
В обозревателе объектов щелкните правой кнопкой мыши сервер и выберите пункт Свойства.
Щелкните узел Память .
В пункте Параметры памяти сервера введите нужные значения в поля Минимальный размер памяти сервера и Максимальный размер памяти сервера.
Оставьте параметры по умолчанию, чтобы SQL Server изменял требования к памяти динамически, исходя из доступности системных ресурсов. Рекомендуется задать для параметра Макс. памяти сервера значение, указанное выше.
На следующем снимке экрана показаны все три шага:
Блокировка страниц в памяти (LPIM)
Эта политика Windows определяет, какие учетные записи могут получать доступ к API для сохранения данных в физической памяти, чтобы система не отправляла страницы данных в виртуальную память на диске. Блокировка страниц в памяти может обеспечивать отклик сервера, когда содержимое памяти заносится в файл подкачки. Для параметра Блокировка страниц в памяти указывается значение "Включено" в экземплярах выпуска SQL Server Standard Edition и выше, если учетной записи с привилегией на выполнение sqlservr.exe предоставлено право пользователя Windows Блокировка страниц в памяти (LPIM).
Чтобы отключить параметр Блокировка страниц в памяти для SQL Server, удалите право пользователя Блокировка страниц в памяти у учетной записи с привилегиями для запуска sqlservr.exe (стартовой учетной записи SQL Server).
Использование LPIM не влияет на SQL Server динамическое управление памятью, что позволяет расширить или сузить ее по запросу других клерков памяти. При использовании пользовательского права Блокировка страниц в памяти рекомендуется задать верхний предел для параметра Макс. памяти сервера, как указано выше.
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 с неправильно настроенным параметром максимального объема памяти сервера, в котором не учтены другие потребители памяти в системе, может привести к нестабильной работе. Это зависит от объема памяти, требуемого для других процессов или требований к памяти SQL Server вне области max server memory. См. дополнительные сведения о max server memory.
Начиная с SQL Server 2012 (11.x), флаг трассировки 845 не требуется для использования заблокированных страниц в выпуске Standard Edition.
Включение блокировки страниц в памятиВключение параметра "Блокировка страниц в памяти"
В меню Пуск выберите команду Выполнить. В окне Открыть введите gpedit.msc.
Откроется диалоговое окно Групповая политика .
В консоли Групповая политика разверните узел Конфигурация компьютера, затем узел Конфигурация Windows.
Разверните узлы Настройки безопасности и Локальные политики.
Выберите папку Назначение прав пользователя .
Политики будут показаны на панели подробностей.
На этой панели дважды щелкните параметр Блокировка страниц в памяти.
В диалоговом окне Параметр политики локальной защиты добавьте учетную запись с правами запуска sqlservr.exe (стартовая учетная запись SQL Server).
Несколько экземпляров SQL Server
При выполнении нескольких экземпляров компонента Компонент Database Engineсуществует три подхода к управлению памятью.
Используйте параметр Макс. памяти сервера, чтобы управлять использованием памяти, как указано выше. Установите максимальные значения для каждого экземпляра, учитывая, что их сумма не должна превышать общий объем физической памяти, установленной на компьютере. Рекомендуется выделять каждому экземпляру объем памяти, пропорциональный его ожидаемой рабочей нагрузке или размеру базы данных. Данный подход имеет то преимущество, что свободная память доступна новым процессам или экземплярам сразу же после их запуска. Недостаток состоит в том, что, когда выполняются не все экземпляры, ни один из выполняющихся экземпляров не сможет использовать память, оставшуюся свободной.
Используйте параметр Мин. памяти сервера, чтобы управлять использованием памяти, как указано выше. Установите минимальные значения для каждого экземпляра так, чтобы их сумма была на 1-2 ГБ меньше общего объема физической памяти, установленной на компьютере. Рекомендуется выделять каждому экземпляру минимальный объем памяти, пропорциональный его ожидаемой рабочей нагрузке. Данный подход имеет то преимущество, что выполняющиеся экземпляры могут использовать оставшуюся свободную память в случае, когда выполняются не все экземпляры. Данный подход также полезен, когда на компьютере выполняется другой процесс, интенсивно потребляющий память, так как при этом обеспечивается удовлетворение как минимум заданных потребностей сервера SQL Server в памяти. Недостаток состоит в том, что при запуске нового экземпляра (или любого другого процесса) уже выполняющимся экземплярам требуется некоторое время для освобождения памяти, особенно если для этого им необходимо записать измененные страницы обратно в базу данных.
Отсутствие действий (не рекомендуется). Первый экземпляр, столкнувшийся с рабочей нагрузкой, попытается захватить всю память. Простаивающие экземпляры или экземпляры, запущенные позже других, могут в конечном итоге быть вынуждены работать лишь с минимальным доступным объемом памяти. SQL Server не пытается равномерно распределять возможности использования памяти между экземплярами. Тем не менее все экземпляры будут реагировать на сигналы уведомлений памяти Windows, корректируя объемы используемой ими памяти. Операционная система Windows не балансирует память между приложениями с помощью уведомлений памяти API-интерфейса. Эти уведомления лишь обеспечивают глобальную обратную связь относительно доступности памяти в системе.
Эти настройки можно изменять без перезапуска экземпляров, поэтому можно легко экспериментировать с целью нахождения наиболее подходящих настроек для данной модели использования.
Выделение максимального объема памяти
Для всех выпусков SQL Server память можно выделять вплоть до предела виртуального адресного пространства процесса. Дополнительные сведения см. в разделе Предельный объем памяти для выпусков Windows и Windows Server.
Примеры
Пример A. Задание параметра max server memory равным 4 ГБ.В следующем примере параметр max server memory устанавливается равным 4 ГБ. Обратите внимание, что, несмотря на то что sp_configure указывает имя параметра как max server memory (MB) , в примере демонстрируется пропуск (MB) .
При этом будет выведена инструкция, похожая на следующую:
Параметр конфигурации "max server memory" (в МБ) изменился с 2147483647 на 4096. Выполните инструкцию RECONFIGURE для установки.
Пример Б. Определение текущего распределения памятиСледующий запрос возвращает информацию о текущем распределении памяти.
Пример В. Определение значения параметра "max server memory" (в МБ).Следующий запрос возвращает сведения о настроенном сейчас значении и значении, которое используется в SQL Server. Этот запрос возвратит результаты независимо от того, имеет ли параметр "show advanced options" значение true.