Назад | Перейти на главную страницу

Использование памяти SQL Server не соответствует

РЕДАКТИРОВАТЬ Извините, забыл подробности, я использую SQL Server 2008 R2 16 ГБ ОЗУ

Мое выделение минимальной / максимальной памяти установлено на 13 ГБ. Запуск perfmon - SQL Server: диспетчер памяти. Память целевого сервера и общий объем памяти сервера подтверждают это. Счетчик оперативной памяти в диспетчере задач составляет 15 ГБ (при условии, что 2 ГБ используются для других приложений)

Я не понимаю, почему процесс sqlservr.exe показывает использование только 82 КБ в диспетчере задач? Кроме того, вся память, потребляемая процессами, запущенными на моем сервере из диспетчера задач, также не достигает 15 ГБ.

Итак, что дает

Какую версию SQL Server вы используете? Это x64 или x86?

Я предполагаю, что это машина x86, использующая AWE. Когда используется AWE, диспетчер задач не сообщает правильный объем используемой памяти. Это нормально, используйте счетчик perfmon, чтобы узнать, сколько памяти используется.

115982 - очень похожий вопрос

Это 64-битный сервер - включена ли у вас локальная политика блокировки страниц в памяти?

наиболее вероятная причина заключается в том, что этот 64-разрядный экземпляр SQL Server использует «заблокированные страницы», как я описывал в предыдущем вопросе. Обратите внимание, что имя в столбце диспетчера задач называется Память (частный рабочий набор). Помните, мы также говорили, что если 64-битные экземпляры SQL Server используют «заблокированные страницы», эта память не будет частью рабочего набора (потому что помните, что API-интерфейсы AWE используются на 64-битных страницах для «блокировки» страниц, и эта память не является частью рабочего набора) . Так как заблокированные страницы не являются частью рабочего набора, они не будут отображаться в этом столбце диспетчера задач. В диспетчере задач для Windows Server 2003 этот столбец называется «Использование памяти», но он также отражает рабочий набор процесса.

Вот статья, которая подробно объясняет это

Вы также можете просмотреть счетчики в SQL

SELECT
    object_name
   ,Counter_name
   ,cntr_value
   ,ROUND(( cntr_value * 8192.0 ) / 1048576, 0) AS cntr_value_MB
FROM
    sys.dm_os_performance_counters
WHERE
    object_Name LIKE '%Buffer Manager%'
    AND RTRIM(counter_name) IN ( 'Free pages', 'Total pages',
                                 'Database pages' ) 
UNION SELECT
    object_name
   ,Counter_name
   ,cntr_value
   ,ROUND(( cntr_value / 1024 ), 0) AS cntr_value_MB
FROM
    sys.dm_os_performance_counters
WHERE
    counter_name IN ( 'Target Server Memory (KB)',
                      'Total Server Memory (KB)' )