【发布时间】:2016-12-24 05:54:04
【问题描述】:
检查当前有多少(实际)内存的好方法是什么 正在使用与 SQL Server 为自己分配了多少?
我一直在诉诸 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 的“实际”使用量很重要。
【问题讨论】:
-
DBCC FREE 调用并非旨在将内存释放回操作系统,它们只是将与其功能相关的页面标记为可用。一旦服务器分配了内存,它就会保留它,它没有理由执行昂贵的重组和刷新,最大内存选项是一个例外。真正的问题可能是为什么你需要这样做?
-
在主动-主动实例的情况下,SQL Server 实例有时会占用比所需更多的内存,它会限制其他迫切需要它们的实例。除了减少每个节点的实例并增加物理内存之外,有没有更好的方法来解决这个问题?
-
1) 这个问题属于 DBA。 2)不要这样做。告诉 SQL Server 允许使用多少内存,它通常会根据需要使用多少内存,直到该限制……通常这将是整个数据库的大小加上一些,除非数据库是大于内存限制。如果您不希望它这样做,那么您需要使用
max server memory设置来设置限制。 -
1) 好的,下次我发帖时会记住这一点,除非有办法移动这个问题,你可以帮忙吗? 2)数据库大小肯定比内存大得多。您说limit max server memory 应该可以解决问题是正确的,但请记住我们正在谈论主动-主动集群。这意味着任何实例都可以托管在任何节点上。这使得分配特定数量的最大服务器内存变得困难。
标签: sql-server windows memory