What's a good way of checking how much (actual) memory is currently being used vs. how much is SQL Server allocated to itself?
我一直在诉诸 memory_utilization_percentage,但在运行以下释放内存后,这似乎并没有改变。
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 的 max server memory 并再次增加它以强制 SQL Server 释放未使用但已分配的内存。然而,这种方法的一个问题是我们无法确定将 最大服务器内存 减少多少,因此冒着杀死 SQL Server 的风险。这就是为什么在减少 最大服务器内存 值之前了解 SQL Server 的“实际”使用量很重要。
最佳答案
以下修改后的脚本对我有用。我需要临时释放 SQLServer 持有的一堆 RAM,以便我们可以在同一台服务器上运行一些其他一次性进程。它会暂时释放 SQL 保留的内存空间,同时仍允许它根据需要吞噬内存。
我添加了一个内置的等待功能,让 SQLServer 在将内存恢复到原始级别之前实际释放内存。显然根据需要调整值以满足您的需要。
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
关于sql-server - 如何强制 SQL Server 释放内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38998909/