SQL 2008内存使用情况

我有一个Windows Server 2008 R2企业服务器上运行的SQL Server 2008(版本10.0.1600),具有8 GB的物理内存。 如果我打开任务pipe理器,我可以在“性能”选项卡的“物理内存”部分看到只有340 MB可用的8191总计,但是我看不到使用如此大小的内存的任何进程。 请注意SQL Server内存限制为6GB(最大服务器内存= 6000)。

如果我打开Sysinternals进程资源pipe理器,我可以看到sqlsrvr.exe进程有:

 Private Bytes: 227.000 K Working Set: 140.000 K Virtual Size: 8.762.000 K 

这是什么意思? 有什么办法可以释放这个内存的其他进程? 为什么虚拟大小作为分配的内存? 我以为虚拟大小只是“保留内存”。

这个是正常的。 SQL服务器将始终使用所有可用的内存,并在系统需要更多资源时缩减。

这篇文章描述了正在发生的事情。

当您启动SQL Server 时,即使在服务器上的活动较less时SQL Server内存使用情况可能会继续稳步增加而不会下降。 此外,任务pipe理器和性能监视器可能会显示计算机上可用的物理内存正在稳步下降,直到可用内存在4到10 MB之间。

这种行为本身并不表示内存泄漏。 此行为是正常的并且是SQL Server缓冲池的预期行为。

默认情况下, SQL Server根据操作系统报告的物理内存负载dynamic增大和缩小缓冲池(caching)的大小。 只要有足够的内存可用来防止分页(4 – 10 MB),SQL Server缓冲池将继续增长。 由于与SQL Server在同一台计算机上的其他进程分配内存,SQL Server缓冲区pipe理器将根据需要释放内存。 SQL Server可以每秒释放并获取几兆字节的内存,使其能够快速调整内存分配更改。

由于SQL Server分配内存的方式(特别是在启用了AWE的情况下),任务pipe理器和进程pipe理器不会给你一个准确的指示它实际使用了多less内存。 为了得到正确的数字,你必须直接询问SQL Server。 最简单的方法是运行perfmon,然后添加计数器SQLServer:内存pipe理器/共享服务器内存。 该计数器将以KB为单位报告总内存使用情况。

现在,如果SQL Server使用的是全部6000 MB,那么这是完全正常的(和理想的)行为。 如果使用的远远多于此,则可能会有问题。