我有一台虚拟机(在 vmware esxi 4 上运行的 Windows 2008 Server R2 64 位),安装了 6 GB 的 RAM。它报告内存使用率为 95%,CPU 接近 0%。此服务器在 IIS 上托管一些 WCF 服务,并安装了 AppFabric,后者安装了自己的 SQL Server 2008 R2 Express。总而言之,使用率相当低。
查看资源监视器的“内存”选项卡时,没有明显的进程消耗大量内存。列出的所有进程的提交列总和约为 1.5 GB。因此,虽然机器报告使用率为 95%(超过 5 GB),但我不知道是什么在使用它。
查看性能,我在 Process 对象中添加了几个计数器,发现的最大异常是 sqlserver 的虚拟字节数大于 6 GB,但其私有字节数为 125 MB。
虚拟字节数高是否证明 SQL 是内存使用量高的根源?什么原因导致内存使用量激增?或者我应该寻找其他方法来隔离内存占用大户?
答案1
如果您没有为 SQL Server 实例设置最大内存值,它将消耗尽可能多的系统 RAM 进行缓存。这可能是问题的根源。
答案2
如果您没有设置 SQL 可以使用的内存量限制,那么它将占用所有内存。它显示内存使用率如此之高是因为 SQL 已经占用了所有内存,但这并不意味着它正在积极地使用这些内存进行查询。相反,它使用这些内存来存储页面、执行计划和许多其他有用的东西。要查看 SQL 正在积极地使用内存做什么,您需要运行此命令。从 sys.dm_exec_query_memory_grants 中选择 * 您需要做的就是降低 SQL 可以使用的 RAM 量,请记住,它将略微超过您为运行 SQL 所需的 RAM Windows 设置的限制。
希望有所帮助。