我对这个主题的了解表明 perf counter SQL Server:Memory Manager: Total Server Memory 只为您提供缓冲池内存。在名为 sys.dm_os_process_memor 的 DMV 中有一个名为 physical_memory_in_use 的列,它为您提供物理工作集。
但我不确定...
是否有 DMV 或性能计数器可以告诉我 SQL Server 进程在 64 位 Windows 操作系统上运行的 64 位 SQL Server 2008 R2 和 SQL 2012 使用的总物理内存(缓冲池 + 非缓冲池,即 MemToLeave)?
我不确定单个内存视图,但您可以从两个查询中获取信息。第一个(取自Glenn Berry 的 DMV 查询)利用sys.dm_os_buffer_descriptors并将按数据库向您显示缓冲池:
我通过查看sys.dm_os_memory_cache_entries组合的第二个查询向我显示非缓冲池信息:
有许多与记忆相关的 DMV
dm_os_memory_*
,用. 您可以使用这些来调查 SQL Server 在各个级别上如何使用内存。我遇到了 Joe Sack 建议的这个解决方案(现在是 SQLSkills)
在“Private Bytes”中查找非缓冲池内存(MemToLeave)
在我看来(刚刚测试并且似乎正确)在 64 位 进程上:sqlservr:私有字节” 可以为您提供 SQL Server(缓冲池 + 非缓冲池)使用的总内存,考虑到内存中的锁定页面未启用。
如果启用内存中的锁定页面,那么私有字节将为您提供 SQL Server 进程使用的总非缓冲池内存。