SQL Server:内存使用率高(7GB)+页面文件使用率高(7GB)但CPU使用率(2%至10%)

可能重复:
SQL Server内存不断增加,从1GB RAM到一周7GB。

大家好,

我运行的SQL服务器有很多更新大量数据的脚本(几个表上的数百万条logging)。 不过,我认为有一个内存泄漏,因为RAM使用率达到了可能的8GB的7.5GB – 这是在一个8核心服务器。 页面文件去7.28GB,因为我认为SQL服务器保持RAM,我不认为它使用。

我真的需要什么可以导致这个问题或如何解决这个问题的意见!

我的设置

Microsoft Windows Server 2003 Standard 64-bit edition Service Pack 2 SQL Server 2005 Microsoft SQL Server Management Studio 9.00.4035.00 Microsoft Analysis Services Client Tools 2005.090.4035.00 Operating System 5.2.3790 

SQL Server的应用和使用

我正在使用PHP的SQL服务器,我使用PHP的exec函数通过SQLCMD运行脚本和查询。

什么可能是所有这些内存使用情况和巨大的页面文件的可能原因?

我希望我已经提供了足够的信息来尝试找出问题。 让我知道如果还有什么我应该join或试图找出。

谢谢大家

Sql Server的内存pipe理是一个非常广泛的话题,但是这里提到的一些东西应该加以解决。

我将假设你正在查看任务pipe理器来获取你所指的页面文件的使用情况。 这不是物理页面文件的大小,也不是物理页面文件空间的使用量 – 这就是所谓的提交费用 ,这基本上是全部物理页面文件空间的潜在数量, 增值服务(VAS和物理内存不是一回事) 。 如果您想查看实际的页面文件使用情况,请查看PagingFile:%Usage perfmon counter – 这几乎肯定是一个非常小的百分比。 您的提交费用的总大小(即,任务pipe理器将显示为PF用量)基本上是所有可能的VAS(即,所有页面文件空间+系统上的总物理内存)的总和。

Sql Server不覆盖操作系统的内存pipe理工具 – 它使用与任何用户模式应用程序(主要是VirtualAlloc系列和AWE系列 , 仍然在64位系统上使用)相同的Windows提供的内存API。 Sql Server 确实有一个子系统专门用来pipe理自己的内存使用情况 ,但是这个子系统并没有什么特别之处,在底层操作系统的请求,接收,提交等方面对于任何用户模式应用程序都是不可用的。

就像其他人所说的那样,Sql Server绝对是基于系统/用户定义的约束而devise的,尽可能多地使用内存。 但是,它会根据系统的使用情况(即在启动时保留相对less量的内存,并继续从操作系统请求/预留,因为它需要)而增加到内存占用量。 它也被devise为(并且相当擅长)根据需要对操作系统内存压力做出响应,并且在操作系统“请求”它之前保留它的内存占用空间(有关更完整的理解,请参阅本博客和这个博客和这个博客 )。

如果你想迫使Sql Server释放/缩小当前的内存占用量,可以通过降低“max server memory”系统configuration中指定的值并运行,直接告诉它(假设你正在运行Sql 2005及更高版本)重新configuration。 这当然是有限制的(即这个configuration只能限制缓冲池,但这是目前最大的内存使用者)。 这不是一个连接级别的设置,如其他地方所暗示的那样,它是一个系统范围的设置(有与内存相关的连接级别设置,但没有任何与这个问题有关)。 如果你正在运行Sql 2000,你需要进行调整,然后重新使用Sql服务 – 注意在Sql 2000内存pipe理上,几乎每种方式都有很大的不同(可能需要单独的问题/讨论)。

我强烈build议您阅读几个博客 ,以了解基本的Windows和SQL Server内存pipe理 ,不要花太长的时间,在尝试了解这种情况下正在发生的事情时非常值得学习。

SQLServer有自己的内存pipe理,它覆盖了操作系统的内存pipe理。 你可以限制它抓取的内存量,有几种方法可以做到这一点,但最简单的方法是启动SqlServer Management Studio,右键单击sql实例,select属性,然后进入内存选项卡。 如果从pipe理代码调用数据库,也可以在连接级别执行此操作。

SQL Server 旨在使用所有可用的系统内存。 正如我们所说的那样,如果你有其他需要RAM的东西,你可以限制它,但是一般的规则是感谢SQL使用RAM :-)。