Максимальная память SQL Server не ограничивает использование оперативной памяти

18

Я хотел бы ваш вклад по этому вопросу. У меня есть 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 МБ.

Мартин Шоберг
источник

Ответы:

20

Параметр max memory для серверов SQL Server определяет ограничения только для использования пула буферов. Будут переменные, но значительные ассигнования, требуемые сверх этого предела.

У Джонатана Кеяйаса , Кристиана Болтона и Джона Самсона есть сообщения уровня 300/400 по этой теме. У Брента Озара есть более легкая для чтения статья, которая могла бы быть лучшим местом для начала.

Также связано: SQL Server 2008 R2 «Ghost Memory»

Марк Стори-Смит
источник
да, я согласен, что он ограничивает только буферный пул. Спасибо за закладки, я их посмотрю.
Мартин Шёберг
Я читаю по этим ссылкам, и там есть кое-что хорошее. Я обновлю свой вопрос тем, что узнаю. Я также чувствую облегчение, что у меня есть номер для Макса Пиццерии, легко доступный ... Интересно, делают ли они домашнюю доставку?
Мартин Шеберг
16

Как уже говорилось, буферный пул и кеш процедур - это единственные вещи, которые контролируются максимальной памятью сервера. В SQL Server есть много других вещей, которые могут потреблять память сверх этого предела. Они включают (но не ограничиваются ими):

  • База данных Почта
  • SQLCLR
  • Расширенные хранимые процедуры
  • Двоичные файлы сами
  • SQL Mail
  • SSIS
  • SSAS
  • SSRS
mrdenny
источник
Из вышеупомянутого мы используем двоичные файлы ofc и ssis на этом сервере.
Мартин Шеберг
1
Какое другое программное обеспечение установлено на сервере? И я имею в виду что угодно. Драйверы MPIO, драйверы флэш-накопителей, программное обеспечение для резервного копирования, антивирусные программы, sys-internals и т. Д.
mrdenny
Сервер довольно чистый и недавно установленный, но у нас там есть некоторые. Я постараюсь составить полный список в конце этой недели. Коротко и по моей памяти ... у нас есть iodrive (dell), mcafee, processsexplorer на рабочем столе, iometer, treeize ...
Martin Sjöberg
1
Драйверу FusionIO требуется много памяти для работы. Это, вероятно, занимает много.
Мрденный
Можно ли это доказать? Или настроить его, чтобы использовать меньше оперативной памяти? Софар, кажется, освобождает ОЗУ, когда это необходимо, и я не заметил никаких недостатков, а просто добавил, что нам нужно увеличить количество пакетов ssis. Я обеспокоен тем, что может случиться с использованием ОЗУ.
Мартин Шеберг
3

Начиная с SQL 2012, single_pages_kb был заменен pages_kb в этом DMV. https://msdn.microsoft.com/en-us/library/ms175019.aspx?f=255&MSPPError=-2147217396

Поэтому, если вы хотите выполнить запрос, включенный в вопрос, на сервере 2012+, удалите строку single_.

Разван Зойтану
источник
Благодарю. Я преобразовал его в page_size_in_bytes, но это было не то же самое.
Элиас
2

http://msdn.microsoft.com/en-us/library/ms178067.aspx

Чтобы уменьшить максимальный объем памяти сервера, вам может потребоваться перезапустить SQL Server, чтобы освободить память.

Насколько я понимаю, что если страница в пуле буферов не была записана на диск, она не будет выпущена, пока она не будет.

Влияет ли уменьшение параметра max memory на SQL Server для удаления грязных страниц?

Он мог контролировать менеджер буфера в perfmon, чтобы убедиться в этом. Perfmon -> SQLServer: менеджер буфера: страницы базы данных

Крейг Эфрейн
источник
Вам может потребоваться перезапустить SQL Server. Это не всегда обязательно. Знаете ли вы условия, при которых перезагрузка является или не требуется для освобождения памяти?
Ник Чаммас
Я бы отредактировал эти детали в вашем существующем ответе и удалил этот. Возможно, mrdenny может ответить на ваш вопрос об удалении грязных страниц.
Ник Чаммас
1
Правильно, SQL не может освободить страницу памяти, пока она грязная (была записана). Каждый раз, когда системные контрольные точки, грязные страницы записываются на диск. Я не верю, что изменение максимальной памяти сервера приводит к возникновению контрольной точки.
Мрденный
1
Перезапуск экземпляра для изменения настроек памяти может быть большой ошибкой. Хотя изменение настроек памяти не вызывает CHECKPOINTоперации с базами данных, оно очищает кэш процедур. Если вы перезапустите экземпляр только для изменения настроек памяти, кеш процедур будет не только холодным, но и кеш данных тоже холодным. Если максимальный объем памяти не может быть уменьшен из-за грязных страниц в памяти, выполните CHECKPOINTкоманду в базах данных, чтобы сбросить грязные страницы на диск, а затем измените настройки памяти в непиковое время без перезапуска экземпляра.
Джон Зигель