Когда речь идет о управлении экземпляром SQL Server, понимание того, как работает выделение памяти, является ключевым для оптимальной производительности. В этой статье мы рассмотрим концепции выделения памяти в SQL Server и то, как это может повлиять на отчеты о использовании памяти в диспетчере задач.
Роль блокировки страниц в памяти (LPIM)
Один из важных факторов, которые следует учесть, – это наличие привилегии блокировки страниц в памяти (LPIM). Когда привилегия LPIM предоставляется учетной записи службы SQL Server, используется другой API выделения памяти, который выделяет память вне рабочего набора памяти. Это означает, что память, отображаемая в разделе “Подробности” диспетчера задач, может не отражать точное использование памяти SQL Server.
API выделения памяти SQL Server
SQL Server использует два различных API выделения памяти в зависимости от того, предоставлена ли привилегия LPIM или нет.
API VirtualAlloc
API VirtualAlloc используется, когда привилегия LPIM не предоставлена. Память, выделенная с использованием этого API, помещается в рабочий набор памяти и может быть размещена на диске в ответ на давление операционной системы на память.
API Address Windowing Extension (AWE)
API AWE используется, когда привилегия LPIM предоставлена. Память, выделенная с использованием этого API, выходит за пределы рабочего набора памяти и считается заблокированной и неподлежащей размещению на диске операционной системой Windows. Важно отметить, что API AWE используется только для выделения памяти для буферного пула SQL Server, в то время как память, не относящаяся к буферному пулу, все еще выделяется с использованием API VirtualAlloc.
API AWE в 64-битном SQL Server
В прошлом API AWE часто использовался в 32-битном SQL Server для доступа к более чем 4 ГБ физической памяти. Однако в 64-битном SQL Server функция AWE отсутствует. Любое упоминание AWE в настройках конфигурации 64-битного SQL Server игнорируется. Путаница может возникнуть из-за исторического использования AWE в 32-битном SQL Server.
Предоставление привилегии LPIM для SQL Server
Чтобы предоставить привилегию LPIM учетной записи службы SQL Server, вы можете добавить “NT SERVICE\MSSQLSERVER” в “Локальная политика безопасности” > “Локальные политики” > “Права пользователя” > “LPIM”. После внесения этого изменения необходимо перезапустить службу SQL Server, чтобы привилегия вступила в силу.
Мониторинг использования памяти SQL Server
При мониторинге использования памяти SQL Server важно использовать правильные инструменты и методы. Диспетчер задач может не предоставлять точное представление фактического использования памяти из-за наличия LPIM. Вместо этого вы можете использовать следующие методы:
Perfmon
Запуск Perfmon в фоновом режиме и захват счетчиков производительности “Целевая память сервера (KB)” и “Общая память сервера (KB)” может дать вам более точное представление использования памяти SQL Server. Эти счетчики отражают память, выделенную SQL Server, включая память, выделенную с использованием API AWE.
sys.dm_os_process_memory DMV
Еще один способ увидеть количество заблокированной памяти, выделенной SQL Server, – это запросить представление управления динамической памятью sys.dm_os_process_memory (DMV). Это представление предоставляет информацию о различных счетчиках памяти, включая выделение заблокированных страниц. Значения, полученные из этого представления, будут включать память, выделенную с использованием API AWE.
Заключение
Понимание выделения памяти SQL Server является необходимым для эффективного управления и мониторинга экземпляра SQL Server. Предоставляя привилегию LPIM и используя соответствующие инструменты для мониторинга использования памяти, вы можете обеспечить оптимальную производительность и избежать путаницы, вызванной неточными отчетами о памяти в диспетчере задач.
Помните, что при предоставлении привилегии LPIM SQL Server использует API AWE для выделения памяти буферного пула, в то время как память, не относящаяся к буферному пулу, выделяется с использованием API VirtualAlloc. Диспетчер задач отображает только память в рабочем наборе, которая может не включать память, выделенную с использованием API AWE. Поэтому рекомендуется полагаться на Perfmon или представление управления динамической памятью sys.dm_os_process_memory для получения точной информации об использовании памяти.
Следите за новыми советами и идеями по SQL Server!
Статья последний раз обновлена: 2021-02-12