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

13

На сервере базы данных, который я использую, запущено 6 разных экземпляров SQL Server. Имеет 48 ГБ оперативной памяти. И один из них потребляет более 10 ГБ оперативной памяти, общий объем на данный момент составляет 20 ГБ. Потребление оперативной памяти постоянно растет. За пару дней до этого он использовал более 40 ГБ ОЗУ, и сервер реагировал очень медленно. Приложение показывает проблемы сбоя при сохранении данных.

Поэтому я перезапустил службы SQL Server.

Как только сервисы были перезапущены, их использование сократилось до 4 ГБ, но сейчас оно растет. И я обеспокоен тем, что он увеличится до 40 ГБ за 4 или 5 дней и замедлит работу сервера.

Перезапуск службы не является хорошим вариантом, я думаю.

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

Может ли кто-нибудь помочь с этой проблемой?


источник
1
По умолчанию SQL будет использовать столько оперативной памяти, сколько возможно, чтобы максимизировать свою производительность, это хорошо - это означает, что он кэширует общие запросы и результаты, чтобы сделать ваше приложение быстрее. Он будет использовать оперативную память только до предела, при котором может происходить подкачка отчетов ОС. Вы можете изменить это поведение. См. Эту документацию MS: Как настроить использование памяти с помощью параметров конфигурации в SQL Server. Это также может быть полезно: Как определить правильные параметры конфигурации SQL Server
4
Это НЕ проблема - это разработанное и стандартное поведение для SQL Server! И да - перезапуск процесса SQL Server - ужасная идея ..... SQL Server кэширует в памяти столько данных и страниц индекса, сколько может - таким образом оптимизируется общая производительность системы. Вот почему машина с SQL Server всегда должна быть выделенным сервером - ничего другого не делая, кроме SQL Server.
marc_s
Да я получил его. Это разработано таким образом. Но когда сервер sql использует большую часть памяти, он замедляет работу сервера и приводит к превышению времени ожидания отчетов. Поэтому я хочу запретить серверу sql использовать ограниченную память.
4
На самом деле , если SQL Server использует больше памяти , так как это может, я бы сказал , что сделает его менее вероятно , будет иметь сложности доставки отчетов. Это когда вы искусственно ограничиваете SQL Server (или помещаете слишком много экземпляров в один блок, конкурирующий за ресурсы), где вы увидите проблемы, связанные с предоставлением памяти и другими проблемами.
Аарон Бертран
Но мне интересно, почему он вдруг начал хорошо показывать отчеты после перезапуска службы sql server. Может ли быть так, что слишком много клиентов использовали приложение, из-за которого отчеты не отображались?

Ответы:

14

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

Если вам нужно ограничить объем памяти, который используется одним экземпляром SQL Server, вы можете сделать это в SQL Server Management Studio, щелкнув правой кнопкой мыши имя экземпляра в обозревателе объектов и выбрав свойства. Затем выберите вкладку памяти и установите максимальный объем памяти, который SQL Server будет разрешено использовать. Теперь это не будет ограничивать все аспекты SQL Server таким объемом памяти. Это только контролирует пул буферов и кэш плана выполнения. Такие параметры, как CLR, полный текст, фактическая память, используемая exe-файлами SQL Server, агент SQL, расширенные хранимые процедуры и т. Д., Не контролируются этим параметром. Однако этим другим вещам, как правило, не нужно столько памяти, это буферный пул и кэш плана выполнения, которые требуют большую часть памяти.

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

mrdenny
источник