Я хотел бы ваш вклад по этому вопросу. У меня есть SQL Server 2008r2 Ent. Издание 64 бита с 16 ядрами и 64 ГБ оперативной памяти. По состоянию на 20111014 существует один экземпляр SQL-сервера, полностью исправленный.
Максимальный RAM установлен на 60000MB. Количество бесплатных оперативной памяти составляет 0 в зависимости от менеджера задач после нескольких дней онлайн.
Если я изменю максимальный объем памяти ниже 53 ГБ, то через несколько дней он стабилизируется и получит некоторый свободный объем памяти.
Это процесс sql, который распределяет оперативную память в соответствии с диспетчером задач. Как мне смириться с тем, что на самом деле проблема? Само собой разумеется, что я уже много тестировал, но еще не решил это по своему вкусу. и, о-о, мы не получаем типичное отставание в памяти, когда доступный оперативный памяти уменьшается до 0 бесплатно.
Обновление 1:
Вдохновленный другим Q / A, связанным с RAM на этой странице /dba//a/7062/2744 . Я использовал эти два, чтобы увидеть, для чего используется ОЗУ.
SELECT TOP ( 10 )
[type] AS [Memory Clerk Type] ,
SUM(single_pages_kb) AS [SPA Mem, Kb]
FROM sys.dm_os_memory_clerks
GROUP BY [type]
ORDER BY SUM(single_pages_kb) DESC
OPTION ( RECOMPILE ) ;
SELECT DB_NAME(database_id) AS [Database Name] ,
COUNT(*) * 8 / 1024.0 AS [Cached Size (MB)]
FROM sys.dm_os_buffer_descriptors
--WHERE database_id > 4 -- system databases
-- AND database_id <> 32767 -- ResourceDB
GROUP BY DB_NAME(database_id)
ORDER BY [Cached Size (MB)] DESC
OPTION ( RECOMPILE ) ;
Используемый объем, показанный этими данными, в первую очередь составляет 7948432 КБ, а второй - 44030 57812 МБ, что в общей сложности составляет около 52 ГБ, используемых сервером sql ... так куда же ушла остальная часть моей ОЗУ? :-) Диспетчер задач показывает, что сейчас кэшировано 363, доступно 401, свободно 40, и sqlservr.exe имеет частную память, установленную в 64 459 656. Max Ram, как и раньше, установлен на 60000 МБ.
источник
Как уже говорилось, буферный пул и кеш процедур - это единственные вещи, которые контролируются максимальной памятью сервера. В SQL Server есть много других вещей, которые могут потреблять память сверх этого предела. Они включают (но не ограничиваются ими):
источник
Начиная с SQL 2012, single_pages_kb был заменен pages_kb в этом DMV. https://msdn.microsoft.com/en-us/library/ms175019.aspx?f=255&MSPPError=-2147217396
Поэтому, если вы хотите выполнить запрос, включенный в вопрос, на сервере 2012+, удалите строку single_.
источник
http://msdn.microsoft.com/en-us/library/ms178067.aspx
Чтобы уменьшить максимальный объем памяти сервера, вам может потребоваться перезапустить SQL Server, чтобы освободить память.
Насколько я понимаю, что если страница в пуле буферов не была записана на диск, она не будет выпущена, пока она не будет.
Влияет ли уменьшение параметра max memory на SQL Server для удаления грязных страниц?
Он мог контролировать менеджер буфера в perfmon, чтобы убедиться в этом. Perfmon -> SQLServer: менеджер буфера: страницы базы данных
источник
CHECKPOINT
операции с базами данных, оно очищает кэш процедур. Если вы перезапустите экземпляр только для изменения настроек памяти, кеш процедур будет не только холодным, но и кеш данных тоже холодным. Если максимальный объем памяти не может быть уменьшен из-за грязных страниц в памяти, выполнитеCHECKPOINT
команду в базах данных, чтобы сбросить грязные страницы на диск, а затем измените настройки памяти в непиковое время без перезапуска экземпляра.