VMWare SQL 2008 R2 Windows 7 高内存使用率

VMWare SQL 2008 R2 Windows 7 高内存使用率

我在运行 SQL Server 2008 R2 和 IIS7 的虚拟机中安装了 Windows 7 64 位。服务器本身有 12 GB 内存,配备双核英特尔至强 @ 2.50 GHz。

问题(我还不太确定这是否是个问题)是任务管理器不断显示正在使用 8.50 GB,但实际上没有任何进程消耗这么多内存。

在此处输入图片描述

我看了看问题是关于 sql 锁定页面分配内存。但我发现这些值是正常的 - 大约 85 mb。以下是命令的屏幕截图

select * from sys.dms_os_process_memorys

在此处输入图片描述

但是根据上图,我还看到total_virtual_space_kb大约 8.50 GB。最后,我运行了 RamMap,它显示大约有 8.50 GB 正在使用中“驱动程序已锁定”. 其他地方有人提出这个“驱动程序锁定”内存正在被 VMWare 使用。

我有几个问题:

1) 这些内存真的被消耗了吗?还是会在需要时释放给另一个进程?我注意到服务器明显很慢,所以我想知道这是否与此有关。此外,我OutOfMemoryExceptions的 asp.net 进程经常会抛出这个问题。

2) 谁在分配/使用这些内存?SQL 还是 VMWare?

3)有什么办法可以解决这个问题吗?

任何帮助都将受到赞赏。

答案1

我怀疑这是虚拟机管理程序 (ESX/i)“气球”驱动程序发挥作用的结果。气球驱动程序通过 VMware 工具工作,从客户操作系统请求一定数量的内存,但实际上不在客户操作系统中使用它。这允许虚拟机管理程序在其他地方使用内存。

由于多种原因,膨胀通常是一件好事,但对于 MSSQL 来说,它往往会有点麻烦,因为 SQL 引擎本身非常擅长内存管理。

这里有一些关于此问题的更多信息,可能比我能解释得更好:

答案2

请检查所有虚拟机的内存预留设置。应将其设置为无限制或设置为服务器上设置的最大内存。

转到 vm 设置,选项卡资源。选择内存并检查限制。

答案3

作为最佳实践,SQL Server 必须首先限制内存使用量。查看 SQL Server 真正需要多少内存的最佳方法是使用 perfmon:

在降低最大服务器内存值之前,请使用性能监视器检查负载下的 SQLServer:Buffer Manager 性能对象,并记下被盗页面和保留页面计数器的当前值。这些计数器将内存报告为 8K 页面的数量。最大服务器内存应设置为高于这两个值的总和,以避免内存不足错误。最低合理最大服务器内存设置的近似值(以 MB 为单位)为 ([被盗页面] + [保留页面])/ 100

来源:TechNet(http://technet.microsoft.com/en-gb/library/ms178067(SQL.90).aspx

相关内容