Параметры конфигурации сервера «Server Memory»
Два параметра памяти сервера, min server memory и max server memory, используются для изменения в конфигурации объема памяти (в мегабайтах), управляемой диспетчером памяти SQL Server для процесса SQL Server, применяемого экземпляром SQL Server.
По умолчанию параметр min server memory имеет значение 0, а параметр max server memory — 2147483647 МБ. По умолчанию SQL Server может динамически изменять требования к памяти в зависимости от доступных системных ресурсов.
Примечание |
---|
Если присвоить параметру max server memory минимальное значение, производительность SQL Server может значительно ухудшиться, иногда сервер даже не будет запускаться. Если не удается запустить SQL Server после изменения этого параметра, запустите его с использованием параметра запуска –f и переустановите параметр max server memory в его предыдущее значение. Дополнительные сведения см. в разделе Параметры запуска службы Database Engine. |
Когда SQL Server использует память динамически, он периодически опрашивает систему, чтобы определить объем свободной памяти. Поддержание достаточного объема свободной памяти позволяет избежать подкачки в операционной системе (ОС). Если свободно меньше памяти, SQL Server высвобождает память для ОС. Если свободно больше памяти, SQL Server может выделить больше памяти. SQL Server добавляет память в буферный пул, только если она требуется для рабочей нагрузки; во время простоя размер буферного пула не увеличивается.
Запрос, возвращающий используемый в данный момент объем памяти, см. в примере Б. Максимальная память сервера управляет выделением памяти SQL Server, включая буферный пул, памятью компиляцией, всеми кэшамии, выделениями памяти qe, памятью диспетчера блокировки и памятью clr (фактически это любой клерк памяти в sys.dm_os_memory_clerks). Память для стеков потоков, куч памяти, связанных поставщиков серверов, отличных от SQL Server, и память, выделенная DLL-библиотекой, отличной от SQL Server, не контролируются параметром максимальной памяти сервера.
Для определения того, когда диспетчер памяти SQL Server может выделить и освободить память буферного пула, SQL Server использует API-интерфейс уведомлений памяти QueryMemoryResourceNotification.
Рекомендуется разрешить SQL Server использовать память динамически; однако существует возможность установить параметры памяти вручную и ограничить объем памяти, доступный серверу SQL Server. Перед настройкой объема памяти для SQL Server определите подходящее значение путем вычитания из общего объема физической памяти того объема, который требуется операционной системе и другим экземплярам SQL Server (и для других нужд, если компьютер не выделен полностью под сервер SQL Server). Разница — максимальный объем памяти, который можно выделить серверу SQL Server.
Настройка параметров памяти вручную
Параметры min server memory и max server memory устанавливаются для определения диапазона значений объема памяти. Этот метод полезно использовать, когда требуется настроить экземпляр SQL Server так, чтобы его параметры не противоречили требованиям к памяти других приложений, запущенных на этом компьютере.
Параметр min server memory используется для гарантированного предоставления минимального объема памяти, доступного диспетчеру памяти SQL Server для экземпляра SQL Server. SQL Server не выделяет немедленно объем памяти, указанный в параметре min server memory, после запуска. Тем не менее, когда это значение достигается с ростом рабочей нагрузки, экземпляр SQL Server не может освободить память, выделенную буферному пулу, если не уменьшить значение параметра min server memory.
Примечание |
---|
Сервер SQL Server не гарантирует, что объем памяти, заданный параметром min server memory, будет выделен. Если нагрузка на сервер никогда не требует выделения всего объема памяти, заданного параметром min server memory, сервер SQL Server будет использовать меньше памяти. |
Тип ОС |
Минимальный объем памяти для max server memory |
---|---|
32-разрядная версия |
64 МБ |
64-разрядная версия |
128 МБ |
Настройка параметров памяти с помощью среды SQL Server Management Studio
Используйте два параметра памяти сервера, min server memory и max server memory, для настройки объема памяти (в мегабайтах), которая находится в управлении диспетчера памяти SQL Server для экземпляра SQL Server. По умолчанию SQL Server может динамически изменять требования к памяти в зависимости от доступных системных ресурсов.
Настройка фиксированного объема памяти
Установка фиксированного размера памяти |
|
Режим «максимизировать пропускную способность для сетевых приложений»
Чтобы оптимизировать использование системной памяти для SQL Server, следует ограничить объем памяти, используемой системой для кэширования файлов. Чтобы ограничить кэш файловой системы, убедитесь, что снят флажок макс. пропускная способность доступа к общим файлам. Можно указать кэш файловой системы минимального размера, выбрав вариант наименьшая занимаемая память или сбалансированный.
Проверка значения параметра в операционной системе
Нажмите кнопку Пуск, выберите пункт Панель управления, дважды щелкните Сетевые подключения, а затем значок Подключение по локальной сети.
На вкладке Общие нажмите кнопку Свойства и выберите Служба доступа к файлам и принтерам сетей Microsoft, затем нажмите кнопку Свойства.
Если выбран параметр макс. пропускная способность для сетевых приложений, выберите любой другой параметр, нажмите кнопку ОК и закройте остальные диалоговые окна.
Блокировка страниц в памяти
Эта политика Windows определяет, какие учетные записи могут использовать процесс для сохранения данных в физической памяти, чтобы система не отправляла страницы данных в виртуальную память на диске. Блокировка страниц в памяти может обеспечивать отклик сервера, когда содержимое памяти заносится в файл подкачки. В SQL Server значение параметра задается равным ON в 32-разрядных и 64-разрядных экземплярах выпуска SQL Server 2012 Standard Edition и выше, если учетной записи с привилегией на выполнение sqlservr.exe предоставлено право пользователя Windows «Блокировка страниц в памяти» (Locked Pages in Memory — LPIM). В более ранних версиях SQL Server задание параметра блокировки страниц для 32-разрядного экземпляра SQL Server требовало, чтобы учетная запись с правами запуска sqlservr.exe имела права пользователя LPIM и параметр конфигурации «awe_enabled» был установлен равным ON.
Чтобы отключить параметр Блокировка страниц в памяти для SQL Server, удалите право пользователя «Блокировка страниц в памяти» для стартовой учетной записи SQL Server.
Отключение блокировки страниц в памяти
Параметр отключения блокировки страниц в памяти |
|
Диспетчер виртуальной памяти
32-разрядная операционная система обеспечивает доступ к 4 ГБ виртуального адресного пространства. 2 ГБ виртуальной памяти предназначены всем процессам и доступны приложениям. 2 ГБ зарезервировано для использования операционной системой. Все выпуски операционных систем содержат переключатель, предоставляющий приложениям доступ к 3 ГБ виртуального адресного пространства, ограничивая объем памяти, доступный операционной системе, до 1 ГБ. Дополнительные сведения о переключателе конфигурации памяти см. в разделе о настройке памяти объемом 4 ГБ в документации Windows. Если 32-разрядная версия SQL Server запущена в 64-разрядной системе, пользователю доступно все 4 ГБ виртуального адресного пространства.
Определенные области адресного пространства сопоставляются с физической памятью диспетчером виртуальной памяти Windows (VMM).
Дополнительные сведения об объеме физической памяти, поддерживаемой различными операционными системами, см. в разделе «Ограничения памяти для выпусков Windows» в документации Windows.
Система виртуальной памяти позволяет превышать объем физической памяти, при этом соотношение виртуальной памяти к физической может быть больше 1:1. В результате чего на компьютерах с разными конфигурациями физической памяти могут работать большие программы. Тем не менее, если объем используемой виртуальной памяти значительно превышает общий объем рабочих множеств всех процессов, производительность может ухудшиться.
Параметры min server memory и max server memory являются расширенными. При использовании системной хранимой процедуры sp_configure для изменения этих настроек изменить их можно, только если параметр show advanced options установлен в значение 1. Эти параметры вступают в силу сразу же без перезагрузки сервера.
Выполнение нескольких экземпляров SQL Server
При выполнении нескольких экземпляров компонента Компонент Database Engine существует три подхода к управлению памятью.
Контроль использования памяти с помощью параметра max server memory. Установите максимальные значения для каждого экземпляра, учитывая, что их сумма не должна превышать общий объем физической памяти, установленной на компьютере. Рекомендуется выделять каждому экземпляру объем памяти, пропорциональный его ожидаемой рабочей нагрузке или размеру базы данных. Данный подход имеет то преимущество, что свободная память доступна новым процессам или экземплярам сразу же после их запуска. Недостаток состоит в том, что, когда выполняются не все экземпляры, ни один из выполняющихся экземпляров не сможет использовать память, оставшуюся свободной.
Контроль использования памяти с помощью параметра min server memory. Установите минимальные значения для каждого экземпляра так, чтобы их сумма была на 1-2 ГБ меньше общего объема физической памяти, установленной на компьютере. Рекомендуется выделять каждому экземпляру минимальный объем памяти, пропорциональный его ожидаемой рабочей нагрузке. Данный подход имеет то преимущество, что выполняющиеся экземпляры могут использовать оставшуюся свободную память в случае, когда выполняются не все экземпляры. Данный подход также полезен, когда на компьютере выполняется другой процесс, интенсивно потребляющий память, так как при этом обеспечивается удовлетворение как минимум заданных потребностей сервера SQL Server в памяти. Недостаток состоит в том, что при запуске нового экземпляра (или любого другого процесса) уже выполняющимся экземплярам требуется некоторое время для освобождения памяти, особенно если для этого им необходимо записать измененные страницы обратно в базу данных.
Отсутствие действий (не рекомендуется). Первый экземпляр, столкнувшийся с рабочей нагрузкой, попытается захватить всю память. Простаивающие экземпляры или экземпляры, запущенные позже других, могут в конечном итоге быть вынуждены работать лишь с минимальным доступным объемом памяти. В SQL Server не предпринимаются попытки равномерно распределять возможности использования памяти между экземплярами. Тем не менее все экземпляры будут реагировать на сигналы уведомлений памяти Windows, корректируя объемы используемой ими памяти. Операционная система Windows не балансирует память между приложениями с помощью уведомлений памяти API-интерфейса. Эти уведомления лишь обеспечивают глобальную обратную связь относительно доступности памяти в системе.
Эти настройки можно изменять без перезапуска экземпляров, поэтому можно легко экспериментировать с целью нахождения наиболее подходящих настроек для данной модели использования.
Выделение SQL Server максимального объема памяти
32-разрядная версия |
64-разрядная версия |
|
---|---|---|
Обычная память |
Не более ограничения виртуального адресного пространства процесса во всех выпусках SQL Server:
|
Не более ограничения виртуального адресного пространства процесса во всех выпусках SQL Server:
|
1 /3gb — это параметр загрузки операционной системы. Дополнительные сведения см. в библиотеке MSDN.
2 WOW (Windows on Windows 64) — режим, в котором 32-разрядная версия SQL Server запускается в 64-разрядной операционной системе. Дополнительные сведения см. в библиотеке MSDN.
Примеры
Пример A
В следующем примере параметр max server memory устанавливается равным 4 ГБ.
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'max server memory', 4096;
GO
RECONFIGURE;
GO
Пример Б.Определение текущего выделенного объема памяти
Следующий запрос возвращает информацию о выделенном в данный момент объеме памяти.
SELECT
(physical_memory_in_use_kb/1024) AS Memory_usedby_Sqlserver_MB,
(locked_page_allocations_kb/1024) AS Locked_pages_used_Sqlserver_MB,
(total_virtual_address_space_kb/1024) AS Total_VAS_in_MB,
process_physical_memory_low,
process_virtual_memory_low
FROM sys.dm_os_process_memory;