Наблюдение за использованием памяти
Область применения:SQL Server
Периодически отслеживайте экземпляр SQL Server, чтобы убедиться, что использование памяти находится в типичных диапазонах.
Настройка максимальной памяти SQL Server
По умолчанию экземпляр SQL Server может использовать большую часть доступной памяти операционной системы Windows на сервере. После выделения памяти она не будет освобождена, пока не будет обнаружено давление на память. Это по проектированию и не указывает на утечку памяти в процессе SQL Server. Используйте параметр максимальной памяти сервера, чтобы ограничить объем памяти, которую SQL Server разрешено получить для большинства его использования. Дополнительные сведения см. в статье Руководство по архитектуре управления памятью.
В SQL Server на Linux установить ограничение памяти можно с помощью средства mssql-conf и параметра memory.memorylimitmb.
Наблюдение за памятью операционной системы
Для отслеживания нехватки памяти используйте приведенные ниже счетчики Windows. Значения многих счетчиков памяти операционной системы можно запрашивать с помощью динамических административных представлений sys.dm_os_process_memory и sys.dm_os_sys_memory.
Память: доступные байты
Этот счетчик указывает на то, сколько байт памяти доступно на данный момент для использования процессами. Низкие значения счетчика Доступно байтов могут указывать на общую нехватку памяти операционной системы. Это значение можно запросить с помощью T-SQL из sys.dm_os_sys_memory.available_physical_memory_kb.Память: страниц в секунду
Этот счетчик показывает число страниц, которые были или получены с диска из-за ошибок страниц физической памяти, или записаны на диск для освобождения пространства в рабочем множестве из-за ошибок страниц. Высокое значение счетчика Страниц/с может означать избыточную подкачку.Память: количество отказов страниц в секунду Этот счетчик указывает частоту отказов страниц для всех процессов, включая системные процессы. Низкий, но не нулевой уровень выгрузки на диск (и вызванные ею ошибки страниц) является нормальным, даже если у компьютера достаточно большое количество доступной памяти. Microsoft Windows Virtual Memory Manager (VMM) принимает страницы из SQL Server и других процессов, так как он обрезает размеры рабочих наборов этих процессов. Деятельность VMM может привести к ошибкам страниц.
Процесс: страничные ошибки/с Этот счетчик указывает скорость возникновения страничных ошибок для заданного пользовательского процесса. Следите за ошибками страниц в секунду, чтобы определить, вызвана ли активность диска пейджингом в SQL Server. Чтобы определить, является ли SQL Server или другой процесс причиной чрезмерного пагинга, отслеживайте счетчик "Сбои страниц/с" для экземпляра процесса SQL Server.
Дополнительные сведения об устранении проблемы излишней подкачки см. в документации по операционной системе.
Изоляция памяти, используемой SQL Server
Чтобы отслеживать использование памяти SQL Server, используйте следующие счетчики объектов SQL Server. Значения многих счетчиков объектов SQL Server можно запрашивать с помощью динамических административных представлений sys.dm_os_performance_counters и sys.dm_os_process_memory.
По умолчанию SQL Server динамически управляет своими требованиями к памяти на основе доступных системных ресурсов. Если SQL Server требует больше памяти, он запрашивает операционную систему, чтобы определить, доступна ли свободная физическая память и использует доступную память. Если для ОС недостаточно свободного объема памяти, SQL Server отпустит память обратно в операционную систему до тех пор, пока не будет освобождено состояние низкой памяти, или до тех пор, пока SQL Server не достигнет минимального ограничения памяти сервера. Однако можно отказаться от динамического использования памяти, задав значения для параметров конфигурации сервера min server memory и max server memory. Дополнительные сведения см. в разделе Параметры памяти сервера.
Чтобы отслеживать объем памяти, используемой SQL Server, изучите следующие счетчики производительности:
SQL Server. Диспетчер памяти: общая память сервера (КБ)
Этот счетчик указывает объем памяти операционной системы, который диспетчер памяти SQL Server в настоящее время выделил для SQL Server. Данное значение, как правило, увеличивается при повышении активности и растет после запуска SQL Server. Запросите этот счетчик с помощью динамического представления управления sys.dm_os_sys_info, наблюдая за столбцом committed_kb.SQL Server: диспетчер памяти: целевая память сервера (КБ)
Этот счетчик указывает идеальное количество памяти, которое SQL Server мог бы использовать с учётом недавней нагрузки. Сравните с общей памятью сервера после периода обычной операции, чтобы определить, имеет ли SQL Server требуемое количество памяти. После обычной работы, Общая память сервера и Целевая память сервера должны быть примерно равны. Если общая память сервера значительно ниже целевой памяти сервера, экземпляр SQL Server может испытывать давление на память. В течение периода после запуска SQL Server ожидается, что общая память сервера будет ниже целевой памяти сервера, так как общая память сервера растет. Используйте динамическое административное представление sys.dm_os_sys_info для запроса этого счетчика, обращая внимание на столбец committed_target_kb. Дополнительные сведения и рекомендации по настройке памяти см. в статье Параметры конфигурации памяти сервера.Процесс: рабочее множество
Этот счетчик показывает объем физической памяти, используемой процессом в настоящее время, согласно данным операционной системы. Проследите за экземпляром счетчика sqlservr.exe. Запросите этот счетчик, используя динамическое представление управления sys.dm_os_process_memory, следя за столбцомphysical_memory_in_use_kb
.Процесс: частные байты
Этот счетчик показывает объем памяти операционной системы, запрошенный процессом для использования в собственных целях. Обратите внимание на экземпляр sqlservr.exe этого счетчика. Так как этот счетчик включает все выделения памяти, запрошенные sqlservr.exe, включая те, которые не ограничены параметром максимальной памяти сервера, этот счетчик может сообщать значения, превышающие максимальный параметр памяти сервера.SQL Server. Диспетчер буферов: страницы базы данных
Этот счетчик указывает число страниц с содержимым базы данных в буферном пуле. Память, не относящаяся к буферному пулу процесса SQL Server, не учитывается. Запросить этот счетчик можно из динамического административного представления sys.dm_os_performance_counters.SQL Server. Диспетчер буферов: соотношение попаданий в кэш буфера
Этот счетчик относится исключительно к SQL Server. Желательно, чтобы коэффициент был не меньше 90. Значение выше 90 указывает на то, что более 90 процентов всех запрошенных данных были получены из кэша данных в памяти без считывания с диска. Дополнительные сведения о диспетчере буферов SQL Server см. в статье SQL Server, объект Buffer Manager. Запросить этот счетчик можно из динамического административного представления sys.dm_os_performance_counters.SQL Server: Диспетчер буферов: продолжительность жизни страницы
Этот счетчик измеряет, сколько секунд самая старая страница находится в буферном пуле. Для систем с архитектурой NUMA это среднее значение для всех узлов NUMA. Более высокое и увеличивающееся значение — это лучше всего. Внезапное снижение указывает на значительное перемещение данных в и из буферного пула, что свидетельствует о том, что рабочая нагрузка не может в полной мере воспользоваться данными, уже находящимися в памяти. У каждого узла NUMA имеется собственный узел буферного пула. На серверах с несколькими узлами NUMA просмотрите время жизни страниц для каждого узла буферного пула с помощью SQL Server: Buffer Node: Page life expectancy. Запросить этот счетчик можно из динамического административного представления sys.dm_os_performance_counters.
Примеры
Определение текущего распределения памяти
Приведенные ниже запросы возвращают сведения о текущем распределении памяти.
SELECT
(total_physical_memory_kb/1024) AS Total_OS_Memory_MB,
(available_physical_memory_kb/1024) AS Available_OS_Memory_MB
FROM sys.dm_os_sys_memory;
SELECT
(physical_memory_in_use_kb/1024) AS Memory_used_by_Sqlserver_MB,
(locked_page_allocations_kb/1024) AS Locked_pages_used_by_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;
Определение текущего использования памяти SQL Server
Приведенный ниже запрос возвращает сведения о текущем использовании памяти сервером SQL Server.
SELECT
sqlserver_start_time,
(committed_kb/1024) AS Total_Server_Memory_MB,
(committed_target_kb/1024) AS Target_Server_Memory_MB
FROM sys.dm_os_sys_info;
Определение продолжительности жизни страницы
Следующий запрос используется sys.dm_os_performance_counters
для наблюдения за текущим значением ожидаемой продолжительности жизни страниц экземпляра SQL Server на уровне общего диспетчера буферов и на уровне каждого узла NUMA.
SELECT
CASE instance_name WHEN '' THEN 'Overall' ELSE instance_name END AS NUMA_Node, cntr_value AS PLE_s
FROM sys.dm_os_performance_counters
WHERE counter_name = 'Page life expectancy';
Связанный контент
- Мониторинг использования ресурсов (Монитор производительности)
- sys.dm_os_sys_memory (Transact-SQL)
- sys.dm_os_process_memory (Transact-SQL)
- sys.dm_os_sys_info (Transact-SQL)
- sys.dm_os_performance_counters (Transact-SQL)
- SQL Server, объект Memory Manager
- SQL Server, объект Buffer Manager
- Параметры конфигурации памяти сервера
- Руководство по архитектуре управления памятью