Как заставить SQL Server выпустить память?
Какой хороший способ проверить, сколько (актуальной) памяти в настоящее время как используется SQL Server для себя?
Я прибегал к memory_utilization_ percent, но, похоже, это не изменилось после запуска следующего для освобождения памяти.
SELECT [Memory_usedby_Sqlserver_MB] = ( physical_memory_in_use_kb / 1024 ) ,
[Memory_utilization_percentage] = memory_utilization_percentage
FROM sys.dm_os_process_memory;
DBCC FREESYSTEMCACHE ('ALL')
DBCC FREESESSIONCACHE
DBCC FREEPROCCACHE
SELECT [Memory_usedby_Sqlserver_MB] = ( physical_memory_in_use_kb / 1024 ) ,
[Memory_utilization_percentage] = memory_utilization_percentage
FROM sys.dm_os_process_memory;
Решение - отказаться от максимальной памяти сервера для SQL Server и снова увеличить его, чтобы заставить SQL Server освободить неиспользуемую, но выделенную память. Однако проблема с этим подходом заключается в том, что мы не можем быть уверены в том, как значительно сократить максимальную память сервера, следовательно, рискует убить SQL Server. Вот почему важно понять, насколько SQL Server используется на самом деле, прежде чем уменьшать значение максимальной памяти сервера.
Ответы
Ответ 1
У меня нет решения, как освободить выделенную память. Однако для наших целей нам удалось выяснить, как обеспечить безопасную работу активных активных кластеров. Мы решили установить минимальную память сервера на ~ 2 ГБ. Это полезно, потому что независимо от того, сколько экземпляров памяти запоминает экземпляр экземпляра, он никогда не будет запускать другие экземпляры из памяти. Таким образом, это решает нашу цель, но она по-прежнему не отвечает на вопрос о том, сколько памяти используется на самом деле, насколько мы можем отказаться от максимальной памяти сервера и т.д.
Ответ 2
SQL Server всегда предполагает, что это основное приложение. Он не предназначен для совместного использования ресурсов. Он всегда будет иметь всю доступную память, и он будет освобождать ее только для операционной системы, если вы не дросселируете "максимальную память сервера".
По дизайну сервер Sql плохо работает с другими.
В этой статье sqlskills рекомендуется использовать базовый уровень дросселирования, за которым следует мониторинг и при необходимости поднимать дроссель:
https://www.sqlskills.com/blogs/jonathan/how-much-memory-does-my-sql-server-actually-need/
Ответ 3
Модифицированный скрипт ниже работал для меня. Мне нужно было временно освободить кучу оперативной памяти, удерживаемой SQLServer, чтобы мы могли запускать некоторые другие одноразовые процессы на том же сервере. Он временно освобождает зарезервированное для памяти пространство памяти SQL, в то же время позволяя ему сгладить память по мере необходимости.
Я добавил встроенное ожидание, чтобы SQLServer мог действительно выпустить mem, прежде чем вернуть его на исходный уровень. Очевидно, отрегулируйте значения по мере необходимости в соответствии с вашими потребностями.
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
/*** Drop the max down to 64GB temporarily ***/
sp_configure 'max server memory', 65536; --64GB
GO
RECONFIGURE;
GO
/**** Wait a couple minutes to let SQLServer to naturally release the RAM..... ****/
WAITFOR DELAY '00:02:00';
GO
/** now bump it back up to "lots of RAM"! ****/
sp_configure 'max server memory', 215040; --210 GB
GO
RECONFIGURE;
GO
Ответ 4
На всякий случай, если вы находитесь в чрезвычайной ситуации и если у вас могут быть небольшие простои, просто перезапустите службу SQL. Это всего лишь несколько секунд, чтобы перезапустить и сделать работу очень хорошо. Щелкните правой кнопкой мыши на имени вашего сервера и нажмите "Перезагрузить".
Ответ 5
Вы должны установить "Макс. память сервера" на некоторое значение между 1-2 ГБ. В большинстве случаев этот диапазон безопасен. Это может занять некоторое время, чтобы освободить память после выполнения ниже:
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'max server memory', 1024;
GO
RECONFIGURE;
GO
Этот параметр позволяет очистить пул, скомпилировать память, все кеши, память clr и т.д.
Минимальное значение для "максимальной памяти сервера" составляет 128 МБ, но не рекомендуется, поскольку SQL Server может не запускаться в определенных конфигурациях. Если это произойдет, используйте переключатель "-f", чтобы заставить SQL начинать с минимальной конфигурации, а затем изменить значение на исходное.
Ответ 6
Этот пост решается в следующей ссылке, пожалуйста, проверьте формат:
SQL Server не освобождает память после выполнения запроса
Ответ 7
Я не думаю, что SQL Server выпускает память, если операционная система не запрашивает ее. Если в случае других процессов запрашивается больше памяти, и если их вообще нет, SQL Server самостоятельно освободит неиспользуемую память. Вместо того, чтобы пытаться очистить неиспользуемую память, я бы, вероятно, ограничил максимально допустимую память SQL.
sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
sp_configure 'max server memory', 512; --or some other value
GO
RECONFIGURE
GO
Для получения дополнительной информации вы можете проверить эту статью MSDN: https://msdn.microsoft.com/en-us/library/ms178067.aspx