虚拟化 SQL Server 内存奇数

psh*_*e73 5 sql-server memory sql-server-2008-r2 vmware windows-server

我以前从未见过这种情况,尽管这可能很常见。我正在查看虚拟化 (VMWare 5.5) SQL Server(Windows 2008 R2 上的 2008R2)。我看到的是,在任务管理器 * 中,sqlserver.exe使用了大约 163 MB 的 RAM,如果我使用procexp,则相同的服务显示使用的 RAM 不到 500 MB。

VM 有 32GB 的 RAM,任务管理器显示正在使用该 RAM 的 31.7GB。VMWare Perfmon 计数器似乎没有指示任何膨胀(也许我读错了一些东西)。

想法/指导表示赞赏。我正在尝试调整新 SQL VM 的大小。此时,我还没有获得对 vSphere 或 vCenter 数据库的访问权限。

* 使用任务管理器是因为我正在查看整体内存利用率,而不仅仅是 SQL Server。一位性能敏感的管理员警告我要让我的脚步保持非常轻松。

Sha*_*nky 7

我看到的是,在任务管理器中,sqlserver.exe 使用了大约 163 Mb 的 RAM,如果我使用 procexp,相同的服务显示使用了不到 500 MB 的 RAM。

您永远不应该查看任务管理器来检查 SQL Server 内存利用率。它永远不会向您显示正确的结果。如果您使用的是 SQL Server 2008 及更高版本,您应该使用 DMV sys.dm_os_process_memory来检查 SQL Server 内存利用率。

select 
(physical_memory_in_use_kb/1024) as PhyMemory_usedby_Sqlserver_MB, 
(locked_page_allocations_kb/1024 ) as Locked_pages_used_Sqlserver_MB, 
(virtual_address_space_committed_kb/1024 ) as Total_MemoryUsed_in_MB, 
process_physical_memory_low, 
process_virtual_memory_low 
from sys. dm_os_process_memory
Run Code Online (Sandbox Code Playgroud)

笔记:

PhyMemory_usedby_Sqlserver_MB 是提交的内存,由物理 RAM 支持。

Total_MemoryUsed_in_MB是SQL Server 使用的内存(RAM 和页面文件)

您犯了一个错误,这可能是许多“新手”在提及 SQL Server 使用的内存时所犯的错误。如果运行 SQL Server 服务的帐户存在内存特权 (LPIM) 中的锁定页面,则它永远不会在任务管理器中显示正确的内存利用率。这是因为任务管理器只显示Process Private Bytes通过Virtual_alloc 函数分配的内存,它是可分页的。现在,如果 SQL Server 服务帐户具有 LPIM,则大部分内存分配将由AWE API完成。通过 AWE API 分配的内存不可分页,因此不会显示在任务管理器中,最终会显示不同(不正确)的值。

进一步阅读:

锁定页面、AWE、任务管理器和工作集的乐趣……(CSS SQL Server 工程师)