【问题标题】:SQL memory - viewing actual memory used and Memory availableSQL 内存 - 查看实际使用的内存和可用的内存
【发布时间】:2011-05-31 15:29:37
【问题描述】:

我做了一些研究,发现了几种不同的方法来查看 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 性能监控方面不是很有经验,我将不胜感激。

提前谢谢你。

【问题讨论】:

  • 您能否在计数器和 DBCC 输出中发布您正在查看的实际计数器以及您看到的实际数字?

标签: sql-server performance memory


【解决方案1】:

查看 Total Server Memory 和 Target Server Memory 的 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,您将看到一个结果集,其中包含名为“缓冲池”和“值”的列,第一个缓冲池被命名为“已提交”和“目标”。这两个值被列为 8 KB Pages,因此将该值乘以 8192 得到以字节为单位的结果,然后除以 1048576 得到以 MB 为单位的结果。在我的开发服务器上,我有 353,230 个页面,即 2759 MB。

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

除非您在内存管理方面遇到特定问题,否则您无需深入研究 DBCC MEMORYSTATUS。我的经验法则是适当调整缓冲池的大小,使可用物理内存低以避免浪费内存(约 1-2 GB,但 Windows 将始终尝试保持 128-256 MB 可用物理内存),以及您的“峰值Commit Charge”(来自任务管理器)永远不会高于服务器中的物理内存量。

【讨论】:

  • 有帮助,但结果集太多,SQL Server 2019 的结果集与上面不匹配。我正在进一步搜索。
猜你喜欢
  • 2018-10-08
  • 2012-02-07
  • 2011-08-12
  • 2016-01-07
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 2011-10-03
  • 1970-01-01
相关资源
最近更新 更多