SQL内存 - 查看实际使用的内存和可用的内存

时间:2011-05-31 15:29:38

标签: sql-server performance memory

我已经做了一些研究并且遇到了几种不同的方法来查看SQL Server实际使用了多少内存(因为任务管理器不准确,因为SQL会为自己保留尽可能多的内存)

我发现这两个资源最有用:

How much RAM is SQL Server actually using?

How to analyze 'dbcc memorystatus' result in SQL Server 2008

然而,我所遇到的困难是,当我在同一台服务器上尝试这两种方法时,我无法关联这些数字。

与查询“dbcc memorystatus”VM Reserved和VM Committed相比,性能计数器(SQL内存管理器 - 总服务器内存和目标服务器内存)的结果非常不同。

它们似乎都以“KB”列出,但数字并非接近。也许我没有看到正确的结果(也许VM保留/提交不是物理内存读取和计数器?但是在这种情况下,在SQL查询中它显示SQL正在使用的内存量/保留,因为没有一个结果看起来像是与性能计数器相对应的数字)

如果有人能给我一些指导,请记住我在SQL性能监控方面不是很有经验,我真的很感激。

提前谢谢。

1 个答案:

答案 0 :(得分:13)

查看总服务器内存和目标服务器内存的Perfmon计数器将为您提供缓冲池缓存的大小,缓冲池缓存是SQL Server使用的总内存的子集。它通常是最大的单个内存池。例如,在我的开发服务器上,我的总服务器内存为2759 MB。您可以使用以下查询来提取此数字:

SELECT object_name, counter_name, cntr_value AS 'Total Server Memory (KB)'
FROM sys.dm_os_performance_counters 
WHERE counter_name = 'Total Server Memory (KB)'
另一方面,DBCC MEMORYSTATUS显示了大量信息。如果向下滚动大约3/4,您将看到一个结果集,其中包含名为“Buffer Pool”和“Value”的列,第一个缓冲池名为“Committed”和“Target”。这两个值列为8 KB页面,因此将值乘以8192以获得以字节为单位的结果,然后除以1048576以获得MB的结果。在我的开发服务器上,我有353,230页,或2759 MB。

DBCC MEMORYSTATUS的第一个结果集为您提供SQL Server保留和提交的虚拟内存(VM)量。我会忽略保留,因为它不是一个很好的指标,表明实际使用了多少内存(这就是Committed值)。此外,保留比我所有服务器中的总物理内存高很多。如果您有“已分配的锁定页面”的值,则“VM Committed”值可能大约为400 MB - AWE和锁定页面不计入提交费用,这就是任务管理器显示不正确值的原因。

除非您对内存管理有特定问题,否则您不需要深入研究DBCC MEMORYSTATUS。我的经验法则是适当调整缓冲池的大小,让你的可用物理内存很低,以避免浪费内存(~1-2 GB,但Windows总会尝试保留128-256 MB的物理内存),以及你的“峰值” “提交费用”(来自任务管理器)永远不会高于服务器中的物理内存量。