Как заставить SQL Server освободить память?
Каков хороший способ проверить, сколько (фактической) памяти используется в данный момент? сколько стоит SQL Server выделили для себя?
Я прибегал к memory_utilization_percentage , но это, похоже, не изменилось после запуска следующего, чтобы освободить память.
1 2 3 4 5 6 7 8 9 |
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 использует ‘actually’, прежде чем уменьшать значение для максимальной памяти сервера .
Модифицированный сценарий ниже работал на меня. Мне нужно было временно освободить кучу RAM, удерживаемых SQLServer, чтобы мы могли запустить некоторые другие одноразовые процессы на том же сервере. Он временно освобождает зарезервированное пространство mem SQL, все еще позволяя ему проглотить mem обратно по мере необходимости. Я добавил встроенное ожидание, чтобы позволить SQLServer фактически освободить mem, прежде чем вернуть его на исходный уровень. Очевидно, отрегулируйте значения по мере необходимости в соответствии с вашими потребностями.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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 |