我最近将一个物理 SQL Server box (2012) 迁移到 ESX (5.1) 只是为了便于管理。它是并且将是服务器上的唯一访客。正如预期的那样,性能受到了轻微影响,大部分情况下只有在启动时才会注意到。这就是我的问题。
我注意到在虚拟化下,缓冲池占用内存比物理内存慢得多。
在 2 天内运行 SQL Server 的物理安装下,分配了所有 120gb 的内存(最大服务器内存)。然而,在管理程序中运行几乎完全相同的设置(我还为来宾提供了全部内存预留),它花了 7 周时间才达到 50GB。这也非常缓慢,就像每天增加 Gb 一样,这转化为几天的缓慢查询。
因此,虽然我在多来宾盒子上看到过这种情况并将其归因于内存压力,但我很困惑为什么它会发生在单个来宾盒子上。我知道 vmware 会压缩和删除内存,但是其中大部分是唯一数据。
所以我的问题是:
1)为什么会这样?我对导致这种情况的确切机制感兴趣。
2) 有没有一种方法可以使用全内存分配来启动 SQL Server?我记得类似 traceflag 的东西,但没能找到 64 位的任何东西。这是必要的吗?
提前致谢。
在重新启动后的前几天,我注意到的另一件事是 PLE 在 500 - 900 范围内保持非常低,随着缓冲池的增长而增加。
跟踪标志 834 可以允许在启动时为 x64 计算机分配最大内存量。以下博客有更多详细信息,但这里是基础知识:
需要安装企业版 需要有 8GB 或更多内存 内存中的锁定页面需要打开。
关联
阅读全文,因为其中贯穿着注意事项和警告,因为这会导致更长的启动时间(或启动失败)。一个很大的问题是它需要分配一块连续的内存,我不确定这将如何在 VMWare 上工作。此外,如果主机中的物理内存为 128GB,我会进一步减少最大服务器内存,以确保有足够的空间供 VMWare 执行此操作。