Почему SQL Server потребляет больше памяти сервера?

36

SQL Server потребляет 87,5% оперативной памяти моего сервера. В последнее время это вызвало множество узких мест в производительности, таких как медлительность. Я исследовал эту проблему. Одно из распространенных решений, которое я мог найти в Интернете, - установить максимальный предел для SQL Server. Это было сделано, и много улучшений получено. Я хочу знать, почему, если максимальное значение памяти не установлено, почему SQL Server продолжает потреблять ресурсы

Комбо
источник
3
Как вы определили, что использование оперативной памяти SQL Server является источником какого-либо узкого места? Медлительность в чем? Во всяком случае, SQL Server должен быть более эффективным, если он использует как можно больше оперативной памяти (или даже больше, чем вы ожидаете или хотите). И если у вас есть другие приложения на сервере, которые страдают из-за того, что SQL Server использует память (как это было задумано), перенесите их на другой сервер .
Аарон Бертран
Я использовал метод здесь lucidica.com/help/got-sql-eating-up-ram Дайте мне знать, если это помогло :) С уважением, Никита.
Никита Косоусов

Ответы:

48

SQL Server будет использовать столько памяти, сколько вы позволите . По умолчанию это число будет охватывать 100% вашей числовой памяти на вашем компьютере. Вот почему вы видите то, что видите. Если вы предоставите SQL Server 24 ГБ памяти, то SQL Server сделает все возможное, чтобы использовать 24 ГБ памяти. Тогда у вас есть SQL Server и ОС, борющиеся за ресурсы, и это всегда приведет к снижению производительности.

Когда вы устанавливаете max server memoryограничение конфигурации, вы ограничиваете, сколько SQL Server может выделить для пула буферов (практически там, где хранятся страницы данных и кэш процедур). В SQL Server есть другие клерки памяти, поэтому для вашей конкретной версии (2008 R2 и ниже) max server memoryпросто контролируется пул буферов. Но это всегда будет самый большой потребитель памяти.

Справочник TechNet по влиянию минимальной и максимальной серверной памяти

Параметры конфигурации min min memory и max server memory устанавливают верхний и нижний пределы объема памяти, используемой пулом буферов ядра СУБД Microsoft SQL Server.

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

Томас Стрингер
источник
11

SQL Server по умолчанию предназначен для использования всей памяти на сервере. Причина этого заключается в том, что SQL Server кэширует данные в базе данных в оперативной памяти, чтобы он мог получать доступ к данным быстрее, чем он мог бы, если бы ему нужно было считывать данные с диска каждый раз, когда пользователь нуждался в этом. Если бы нам нужно было обращаться к дискам каждый раз, когда SQL Server требовал одних и тех же данных много раз, требования к вводу-выводу на диске были бы безумно высокими.

Обычно я рекомендую, чтобы люди оставляли около 4 ГБ ОЗУ для Windows, но это действительно зависит от объема программного обеспечения, работающего на сервере, от того, какие компоненты SQL Server вы используете (не все компоненты следуют этому параметру) и т. Д.

mrdenny
источник
6

Это работает мгновенно без необходимости перезапуска SQL:

Серверная память Параметры конфигурации сервера

Используйте две опции памяти сервера: минимальная память сервера и максимальная память сервера , чтобы перенастроить объем памяти (в мегабайтах), управляемый диспетчером памяти SQL Server для экземпляра SQL Server. По умолчанию SQL Server может динамически изменять требования к памяти в зависимости от доступных системных ресурсов.

Процедура настройки фиксированного объема памяти Чтобы установить фиксированный объем памяти:

  1. В обозревателе объектов щелкните правой кнопкой мыши сервер и выберите Свойства.
  2. Нажмите на узел памяти.
  3. В разделе «Параметры памяти сервера» введите желаемое количество для минимальной памяти сервера и максимальной памяти сервера.

Используйте параметры по умолчанию, чтобы позволить SQL Server динамически изменять требования к памяти в зависимости от доступных системных ресурсов. Значение по умолчанию для минимальной памяти сервера равно 0, а значение по умолчанию для максимальной памяти сервера - 2147483647 мегабайт (МБ).

Надеюсь, это поможет!

Никита Косусов
источник
3

Как сказал Эрик, вы должны управлять памятью, чтобы освободить место для других процессов. Для общего объяснения и некоторых советов о том, как установить максимальную память, проверьте сообщение Джонатана Кехайаса:

http://www.sqlskills.com/blogs/jonathan/how-much-memory-does-my-sql-server-actually-need/

Вы можете изменить рекомендацию с учетом использования вашего сервера.

ДКП
источник
1

SQL Server будет использовать доступную оперативную память, если вы не ограничите использование. Как правило, я стараюсь оставить не менее 2 ГБ свободного места для ОС, т. Е. Если у вас 64 ГБ физической оперативной памяти на хосте, ограничение SQL Server @ 62 ГБ.

http://msdn.microsoft.com/en-us/library/ms191144(v=sql.105).aspx

Эрик Хиггинс
источник