Наблюдение за использованием памяти

Применимо к: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. Получить этот счетчик можно из столбца committed_kb динамического административного представления sys.dm_os_sys_info.

  • SQL Server: Диспетчер памяти: целевая память сервера (КБ)
    Этот счетчик указывает, что идеальный объем памяти SQL Server может использоваться на основе недавней рабочей нагрузки. Сравните с общей памятью сервера после периода обычной операции, чтобы определить, имеет ли SQL Server требуемое количество памяти. Значения счетчиков Общая память сервера и Память целевого сервера должны быть примерно равны. Если общая память сервера значительно ниже целевой памяти сервера, экземпляр SQL Server может испытывать давление на память. В течение периода после запуска SQL Server ожидается, что общая память сервера будет ниже целевой памяти сервера, так как общая память сервера растет. Получить этот счетчик можно из столбца committed_target_kb динамического административного представления sys.dm_os_sys_info. Дополнительные сведения и рекомендации по настройке памяти см. в статье Параметры конфигурации памяти сервера.

  • Процесс: рабочее множество
    Этот счетчик показывает объем физической памяти, используемой процессом в настоящее время, согласно данным операционной системы. Обратите внимание на экземпляр этого счетчика для 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: буферный узел: продолжительность жизни страницы. Запросить этот счетчик можно из динамического административного представления 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';