VMWare 下的 SQL Server 缓冲池利用率

bum*_*una 5 sql-server memory vmware

我最近将一个物理 SQL Server 机器 (2012) 迁移到 ESX (5.1),只是为了便于管理。它是并且将是服务器上唯一的来宾。正如预期的那样,在大多数情况下只有在启动时才会出现边际性能下降。这就是我的问题。

我注意到,在虚拟化下,缓冲池占用的内存比其物理对应物慢得多。

在 2 天内运行 SQL 服务器的物理安装已分配所有 120GB 的内存分配(最大服务器内存)。但是,在虚拟机管理程序中运行几乎完全相同的设置(我还为来宾提供了完全保留的内存),它花了 7 周的时间才达到 50GB。这也是令人痛苦的缓慢,例如每天 Gb 上升,这转化为几天的缓慢查询。

因此,虽然我在多客人盒子上看到过这种情况并将其归因于内存压力,但我对为什么在单个客人盒子上发生这种情况感到困惑。我知道 vmware 会压缩和重复数据删除内存,但是其中大部分是唯一数据。

所以我的问题是:

1) 为什么会发生这种情况?我对导致这种情况的确切机制感兴趣。

2) 有没有一种方法可以在完全内存分配的情况下启动 SQL 服务器?我记得类似跟踪标志的东西,但还没有找到 64 位的任何东西。这是必要的吗?

提前致谢。


我在重新启动后的前几天注意到的另一件事是 PLE 在 500 - 900 范围内保持非常低,这会随着缓冲池的增长而增加。

cfr*_*urg 2

跟踪标志 834 可以允许在 x64 计算机启动时分配最大内存量。以下博客提供了更多详细信息,但以下是基础知识:

企业版需要安装 8GB 或更多 RAM,需要打开内存中的锁定页面。

关联

请阅读全文,因为其中存在警告和警告,因为这可能会导致启动时间更长(或启动失败)。其中一个大问题是它需要分配一块连续的内存,我不确定这在 VMWare 上如何工作。另外,如果主机中的物理内存为 128GB,我会进一步减少最大服务器内存,以确保有足够的空间供 VMWare 执行操作。