sql-server - 如何强制 SQL Server 释放内存?

标签 sql-server windows memory

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 的 ma​​x 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/

相关文章:

java - 从正在运行的 java 程序的内存中定位并读取特定类型的对象

sql - 在 MS SQL 中生成唯一值

sql-server - 使用 T-SQL 进行模糊匹配

c - 内存大小随着动态 2D 内存分配而过度增长

java - 你能在java中访问用c++创建的指针吗

mysql - 如果查询结果很大,则创建多行

sql-server - Sitecore - 添加大号时性能越来越低。项目

sql-server - 测试存储过程的最佳方法是什么?

c++ - 监控单个程序的 CPU 和磁盘利用率

windows - 无法在 Windows 7 上启动 glassfish v3