Как освободить память SQL Server?

9

На моем локальном компьютере установлена ​​песочница SQL Server. Я установил, что память экземпляра SQL Server может использовать до 1000 МБ. При выполнении интенсивной операции использование памяти возрастает до 1000 МБ. После завершения операции SQL Server все еще удерживает память. Как освободить это резервирование памяти?

jrara
источник
2
Каковы ваши min server memoryи max server memory настройки ? Как только SQL Server зарезервирует указанный вами минимум, он никогда не выпустит его, если вы не измените настройку или не откажетесь от экземпляра. Как отметил Джеймс, если он резервирует больше указанного вами минимума, теоретически он должен освобождать его, когда он ему не нужен, и на машине загружается память.
Ник Чаммас
@ Ник: минимальная память сервера: 0 (МБ); максимальная память сервера: 600 (МБ).
Джрара

Ответы:

13

Остановите / запустите службу, больше ничего не освободит память обратно в ОС.

Очевидно, что это не то, что вы когда-либо хотели бы делать с работающим сервером, но вполне разумно для локальной песочницы. С 3 различными экземплярами на моем ноутбуке, это единственный жизнеспособный способ.

Редактировать после комментария @ Ника.

Как отметил Джеймс, если он резервирует больше указанного вами минимума, теоретически он должен освобождать его, когда он ему не нужен, и на машине загружается память.

Какое у вас определение "не нужно"? Как только буферный пул будет заполнен, он не будет отбрасывать страницы до тех пор, пока они не будут обесценены другими загружаемыми страницами. Если вы хотите немедленно вернуть память, как в случае с @jrara, вам нужно остановить /Начните.

Марк Стори-Смит
источник
2
По Microsoft : «В Windows Server 2003 SQL Server использует API уведомления о памяти, QueryMemoryResourceNotificationчтобы определить, когда буферный пул может выделять память и освобождать память». Так что, если вы просто беспокоитесь о том, что другие приложения могут нуждаться в памяти больше, SQL Server теоретически освободит память, которая ему не нужна, когда Windows скажет об этом. Единственная причина, по которой вам нужно форсировать освобождение путем перезапуска экземпляра, заключается в том, что этот механизм работает не так, как задумано, или ваши минимальные / максимальные настройки памяти неверны.
Ник Чаммас
Другая полезная статья msdn, чтобы прояснить этот msdn.microsoft.com/en-us/library/ms178145.aspx . Пока SQL Server достиг минимальной настройки памяти сервера, он будет освобождать память в ответ на уведомления о нехватке памяти из ОС. По моему опыту это должно быть довольно экстремальным, чтобы это произошло, хотя.
Георгиев
Точно @georgeb_dba, он не откажется от этого. Ergo, остановите / запустите и немедленно восстановите ограниченную память вашего ноутбука.
Марк Стори-Смит
4
DBCC FREESYSTEMCACHE ('ALL') 
DBCC FREESESSIONCACHE
DBCC FREEPROCCACHE 

освободит бассейн.

https://msdn.microsoft.com/en-us/library/ms178529.aspx

замечания

Выполнение DBCC FREESYSTEMCACHE очищает кэш плана для экземпляра SQL Server. Очистка кэша планов приводит к перекомпиляции всех последующих планов выполнения и может вызвать внезапное временное снижение производительности запросов. Для каждого очищенного хранилища кэша в кэше плана журнал ошибок SQL Server будет содержать следующее информационное сообщение: «SQL Server обнаружил% d вхождений сброса кэшированного хранилища для кэшированного хранилища«% s »(часть кэша плана) из-за Операции «DBCC FREEPROCCACHE» или «DBCC FREESYSTEMCACHE». " Это сообщение регистрируется каждые пять минут, пока кэш очищается в течение этого интервала времени.

Даниэль Декасс
источник
1
почти уверен, что это на самом деле не уменьшит объем памяти, который SQL зарезервировал на уровне операционной системы
Грег
3

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

JamesRyan
источник