我以前没见过这种情况,尽管这可能很常见。我正在查看虚拟化 (VMWare 5.5) SQL Server(Windows 2008 R2 上的 2008R2)。我看到的是,在任务管理器* 中,sqlserver.exe
使用了大约 163 MB 的 RAM,如果我使用procexp,相同的服务显示使用的 RAM 不到 500 MB。
VM 有 32GB 的 RAM,任务管理器显示正在使用 31.7GB 的 RAM。VMWare Perfmon 计数器似乎没有指示任何膨胀(也许我读错了东西)。
想法/指导表示赞赏。我正在尝试调整新 SQL VM 的大小。此时我还没有获得对 vSphere 或 vCenter 数据库的访问权限。
* 使用任务管理器是因为我正在查看整体内存利用率,而不仅仅是 SQL Server。一位敏感的性能管理员警告我要让我的步伐非常轻。
你永远不应该查看任务管理器来检查 SQL Server 内存利用率。它永远不会告诉你正确的结果。如果您使用的是 SQL Server 2008 及更高版本,则应使用 DMV sys.dm_os_process_memory来检查 SQL Server 内存利用率。
笔记:
PhyMemory_usedby_Sqlserver_MB
是提交的内存,由物理 RAM 支持。Total_MemoryUsed_in_MB
是 SQL Server 使用的总内存(RAM 和页面文件)您犯了一个错误,许多“新手”在提到 SQL Server 使用的内存时可能会犯这个错误。如果运行 SQL Server 服务的帐户存在内存中的锁定页面权限 (LPIM),它永远不会在任务管理器中向您显示正确的内存利用率。这是因为任务管理器只显示通过可分页的Virtual_alloc 函数
Process Private Bytes
分配的内存。现在,如果 SQL Server 服务帐户具有 LPIM,则大部分内存分配将由AWE API完成。通过 AWE API 分配的内存不可分页,因此不会显示在任务管理器中,最终会显示不同的(不正确的)值。延伸阅读:
锁定页面、AWE、任务管理器和工作集的乐趣……(CSS SQL Server 工程师)
我需要用到的工具是 RAMMAP,它将 AWE 池显示为内存消耗大户。是的,有人在具有 64 位 SQL 的 64 位操作系统上启用了 AWE。