Published on

May 26, 2021

Понимание выделения памяти в SQL Server

Когда речь идет о управлении экземпляром 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

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.