Может ли кто-нибудь объяснить мое использование памяти Windows/SQL Server

Я использую Windows Server 2003 x64 с 8 ГБ ОЗУ и 64-разрядный SQL Server 2005. У меня есть SQL, настроенный на использование большого количества памяти, но процесс SQL всегда занимает менее 100 МБ ОЗУ. Это нормально? Он обращается к данным с индексами размером во много ГБ.

Более того, ни один процесс не занимает более 100 МБ, а объем свободной памяти минимальный (‹100 МБ).

Может ли какой-нибудь добрый человек объяснить мне, где используется память и нормально ли используется память SQL?

Использование памяти: http://img129.imageshack.us/img129/8624/02042009210608.png

Параметры памяти SQL Server:

http://img10.imageshack.us/img10/8964/02042009210845.png

Детали памяти:

http://img228.imageshack.us/img228/3830/02042009210917.png


person Mr. Flibble    schedule 02.04.2009    source источник


Ответы (5)


Отображаемое значение не является фактическим объемом используемой памяти. Марк Руссинович занимается проблемами управления памятью в Windows в некоторых сообщениях своего блога. Взгляните на Раздвигая границы Windows: физическая память и Раздвигая границы Windows: виртуальная память.

person Daniel Brückner    schedule 02.04.2009

Я рекомендую Process Explorer (http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx) как лучший способ оценить, сколько памяти использует процесс. Щелкните правой кнопкой мыши заголовок и выберите «Выбрать столбцы», а затем вкладку «Обработка памяти» и, наконец, проверьте параметры «Частные байты» и «Частная история байтов».

Что касается вашей конфигурации памяти SQL, я рекомендую установить минимальное значение того, что вы знаете, которое вам никогда не понадобится на машине для других задач, и максимальное значение, которое подталкивает вас к заполнению физической памяти (считая другие процессы), но не дальше.

person Godeke    schedule 02.04.2009
comment
Iirc Process Explorer не будет раскрывать память, выделенную через AWE. - person Shiv; 22.09.2014
comment
Хм, возможно, это было правдой. AWE больше не поддерживается на более новом SQL-сервере и имеет значение только для 32-разрядной ОС, так что это не должно быть проблемой для тех, кто возвращается к этому. (Кроме того, если вы используете AWE, вы должны знать, что делаете, поскольку это распределение вручную.) - person Godeke; 24.09.2014
comment
Блокированные страницы в памяти в 64-разрядной версии SQL Server используют Windows AWE API для выделения памяти. Это влияет на SQL Server x64, и память, выделенная таким образом, не отображается в Process Explorer. - person Shiv; 26.09.2014
comment
Дополнительное примечание. Заблокированные страницы в памяти включены по умолчанию для учетной записи локальной системы. См. раздел blogs.msdn.com/b/psssql/archive/2007/10/18/. Таким образом, на любом SQL Server x64, работающем под локальной системой, или любой учетной записи с привилегиями блокировки страниц, память выделяется с помощью AWE API и не отображается в Process Explorer. - person Shiv; 26.09.2014

Использование памяти является нормальным для этих параметров, и хотя вы не видите его в диспетчере задач, память использует SQL Server.

Однако, как вы видите, общее использование памяти превышает объем физической памяти, что плохо сказывается на производительности сервера. Вы не должны не устанавливать лимит памяти для сервера базы данных больше, чем у вас есть физической памяти. Сервер базы данных использует память для кэширования данных и результатов, и если ему приходится подкачивать кэш с диска, в его наличии нет никакой выгоды.

person Guffa    schedule 02.04.2009
comment
Я наткнулся на этот пост от MVP, sql-server-performance .com/Community/forums/p/23311/132285.aspx (последний пост на странице) с советом оставить память динамической. Он ошибается? - person Mr. Flibble; 03.04.2009
comment
Память следует оставить динамической, но максимальный объем памяти, который может использовать SQL, должен быть установлен на 1-2 гигабайта меньше, чем установленная физическая память. - person mrdenny; 06.04.2009

Обнаружен этот вопрос при поиске памяти SQL Server, которая не отображается в Process Explorer. Причина этого в том, что в 32-разрядной и 64-разрядной версиях SQL Server распределение памяти можно настроить для использования AWE API.

Предпосылкой для этого является то, что Блокировка страниц в памяти должна быть настроена для учетной записи, под которой запускается процесс SQL Server. Это относится как к 32-битной, так и к 64-битной версии. Это делается с помощью Редактора групповой политики (gpedit.msc), затем перейдите к Конфигурация компьютера -> Параметры Windows -> Параметры безопасности -> Локальные политики -> Назначение прав пользователя, затем добавьте соответствующую учетную запись для параметра политики Блокировать страницы в памяти.

Локальная система по умолчанию уже имеет это (http://blogs.msdn.com/b/psssql/archive/2007/10/18/do-i-have-to-assign-the-lock-privivity-for-local-system.aspx).

Для 32-разрядной версии SQL Server 2005–2008R2 необходимо включить AWE в параметрах памяти с помощью Использовать AWE для выделения памяти. 32-разрядная версия SQL Server 2012 и более поздние версии больше не имеют этого параметра.

Для 64-разрядной версии SQL Server при наличии блокировки страниц в памяти для выделения памяти будет использоваться AWE.

Чтобы увидеть эти распределения памяти AWE, вы можете использовать инструмент сопоставления памяти, такой как Sysinternals RAMMap http://technet.microsoft.com/en-au/sysinternals/ff700229.aspx.

Вы можете определить, использует ли ваш SQL Server заблокированные страницы, с помощью этого:

EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE
GO

EXEC xp_cmdshell 'whoami /priv'
GO

EXEC sp_configure 'xp_cmdshell', 0
RECONFIGURE
GO

и вы должны увидеть, что параметр SeLockMemoryPrivilege включен.

Для 32-разрядной версии SQL Server вы можете подтвердить, что AWE включен с помощью (эта проверка не требуется для 64-разрядной версии):

EXEC sp_configure 'awe enabled'
GO

и run_value должно быть 1.

Если окажется, что ваш сервер не использует выделенную AWE память, используйте Sysinternals Process Explorer (http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx), согласно сообщению Годеке, это лучший способ - лучший интерфейс и более простой для понимания/использования.

person Shiv    schedule 26.09.2014

По умолчанию SQL Server динамически увеличивает и уменьшает размер своего пула буферов (кеша) в зависимости от загрузки физической памяти, о которой сообщает операционная система. Пока доступно достаточно памяти для предотвращения подкачки (от 4 до 10 МБ), пул буферов SQL Server будет продолжать расти. Поскольку другие процессы на том же компьютере, что и SQL Server, выделяют память, диспетчер буферов SQL Server освобождает память по мере необходимости. SQL Server может освобождать и получать несколько мегабайт памяти каждую секунду, что позволяет ему быстро адаптироваться к изменениям распределения памяти.

источник: http://support.microsoft.com/kb/321363

person programmer    schedule 22.12.2011