适用于SQL Server的适当Windows O/S页面文件大小

Translate

对于运行SQL Server的Windows 2003 Server的适当的页面文件大小,是否有很好的经验法则?

This question and all comments follow the "Attribution Required."

所有的回答

Translate

与RAM大小无关,您仍然需要一个至少是物理RAM量1.5倍的页面文件。即使您拥有1 TB的RAM计算机,也是如此,磁盘上将需要1.5 TB的页面文件(听起来很疯狂,但这是事实)。

当进程通过VirtualAlloc / VirtualAllocEx询问MEM_COMMIT内存时,需要在页面文件中保留请求的大小。在第一个Win NT系统中就是如此,今天仍然如此。在Win32中管理虚拟内存:

提交内存后,将分配内存的物理页并且在页面文件中保留了空间.

在某些极端奇怪的情况下,SQL Server始终会要求提供MEM_COMMIT页。鉴于SQL使用动态内存管理预留尽可能多的缓冲池的策略(保留和提交就VAS而言),SQL Server将在启动时请求保留页面文件中的巨大空间。如果页面文件的大小不正确,错误801/802将开始显示在SQL的ERRORLOG文件和操作中。

这总是会引起一些混乱,因为管理员错误地认为大RAM消除了对页面文件的需求。实际上,恰恰相反,由于Windows NT内存管理器的内部工作原理,大内存增加了对页面文件的需求。希望保留的页面文件从未使用过。

来源
Translate

出于对Remus(我非常敬重)的所有应有的尊重,我强烈不同意。如果您的页面文件足够大以支持完整转储,则它将每次执行完整转储。如果您有大量的RAM,这可能会导致严重的故障。

如果存在一次性瞬态问题,您不希望服务器必须将1 TB RAM写入磁盘。如果经常出现问题,则可以增加页面文件以捕获完整的转储。我会等着做,直到您被PSS(或其他有资格分析完整转储的人)迷住了,要求您捕获完整转储。极少数的DBA知道如何分析完整转储。迷你转储足以解决无论如何都会弹出的大多数问题。

另外,如果您的服务器配置为允许1 TB的完整转储,并且经常发生问题,那么您建议手头有多少可用磁盘空间?您可以在一个周末内填满整个SAN。

当您幸运地拥有一个具有3或4 GB RAM的SQL Server时,页面文件1.5 * RAM是很常见的。情况不再如此。我将页面文件保留为所有生产服务器上Windows默认的大小和设置(SSAS服务器遇到内存压力时除外)。

为了澄清起见,我使用的服务器范围从2 GB RAM到2 TB RAM。经过11年多的时间,我只需要增加分页文件的数量即可捕获一次完整的转储。

来源
Translate

根据微软的说法,“随着计算机内存的增加,页面文件的需求就会减少。”然后,本文继续描述如何使用性能日志来确定页面文件的数量。其实正在使用。首先尝试将页面文件设置为1.5倍系统内存,然后执行建议的监视并从此处进行调整。

如何为Windows 64位版本确定适当的页面文件大小

来源
Translate

越大,就越适合应用程序的工作集大小,您将从中开始逐渐减少收益。您可以尝试通过逐渐增大或减小大小来找到它,直到看到高速缓存命中率有显着变化为止。但是,如果缓存命中率超过90%左右,则可能还可以。通常,您应该关注生产系统,以确保它没有超出其RAM分配。

来源
Translate

最近,我们的一台SQL Server遇到了一些性能问题,我们无法完全缩小范围,实际上是使用了一张Microsoft支持票证来帮助他们进行故障排除。提出了与SQL Server一起使用的最佳页面文件大小,Microsoft的建议是RAM量的1 1/2倍.

来源
Translate

如果您正在寻找高性能,则将要避免完全分页,因此页面文件的大小变得不太重要。为数据库服务器投资尽可能多的RAM。

来源
Translate

经过大量研究,我们在Windows 2003 Enterprise x64上运行Enterprise x64的专用SQL Server没有页面文件。

简而言之,页面文件是由操作系统管理的文件缓存,而SQL具有它自己的内部内存管理系统。

所引用的MS文章并不意味着该建议适用于运行现成的服务(例如文件共享)的OS。

具有页面文件只会增加磁盘I / O的负担,因为只有SQL OS可以完成此任务时Windows会尝试提供帮助。

来源
js5
Translate

在这种情况下,通常建议不要使用总物理RAM的1.5倍。在所有内存均由“常规”进程使用的假设下提供了这种非常通用的建议,通常可以将其最少使用的页面移至磁盘,而不会为该内存所属的应用程序进程产生大量的性能问题。

对于运行SQL Server的服务器(通常具有大量RAM),大部分物理RAM都已提交给SQL Server进程,并且应(如果配置正确)锁定在物理内存中,以防止将其分页到页面文件中。 SQL Server在考虑性能的前提下非常小心地管理自己的内存,将分配给进程的大部分RAM用作数据缓存以减少磁盘I / O。将那些数据缓存页面分页到页面文件是没有意义的,因为首先将数据存储在RAM中的唯一目的是减少磁盘I / O。 (请注意,Windows操作系统还类似于磁盘高速缓存一样使用可用的RAM来加快系统操作。)由于SQL Server已经管理了自己的内存空间,因此不应将该内存空间视为“可分页的”,并且不应该将其包含在页面文件的计算中尺寸。

关于Remus提到的MEM_COMMIT,术语令人困惑,因为在虚拟内存中,“保留”从不指实际分配,而是防止另一个进程使用地址空间(而非物理空间)。可供“提交”的内存基本上等于物理RAM和页面文件大小的总和,而执行MEM_COMMIT只会减少提交池中的可用数量。确实那时在页面文件中分配一个匹配的页面。当实际写入已提交的内存页面时,即虚拟内存系统将分配物理内存页面并可能将另一个内存页面从物理RAM碰撞到页面文件时。请参阅MSDNVirtualAlloc功能参考。

Windows操作系统会跟踪应用程序进程与其自身的磁盘缓存机制之间的内存压力,并确定何时应将非锁定的内存页面从物理缓冲区扩展到页面文件。我的理解是,与实际的非锁定内存空间相比,页面文件太大了,会导致Windows过分地将应用程序内存分页到该页面文件,从而导致这些应用程序遭受页面丢失(性能降低)的后果。

只要服务器未运行其他占用大量内存的进程,那么4GB的页面文件大小就足够了。如果已将SQL Server设置为允许在内存中锁定页面,则还应考虑设置SQL Server的最大内存设置,以使OS和其他进程可以使用一些物理RAM。

SQL Server中的802错误指示系统无法为数据缓存提交更多页面。只要Windows能够从非SQL Server进程中调出内存,则增加页文件大小仅在这种情况下才有用。在这种情况下,允许SQL Server内存增长到页面文件中可能会消除错误消息,但由于首先要指出数据缓存的原因,因此它适得其反。

来源