Поделиться через


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

Область применения: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';