SQL 2008 内存使用情况

Dan*_*lla 3 memory-usage sql-server-2008

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

如果我打开 Sysinternals Process Explorer,我可以看到sqlsrvr.exe进程有:

Private Bytes:  227.000 K
Working Set:    140.000 K
Virtual Size: 8.762.000 K
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*Big 8

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

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

当您启动 SQL Server 时,SQL Server 内存使用量可能会继续稳定增加而不是减少,即使服务器上的活动很少。此外,任务管理器和性能监视器可能会显示计算机上可用的物理内存稳步减少,直到可用内存介于 4 到 10 MB 之间。

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

默认情况下,SQL Server 会根据操作系统报告的物理内存负载动态增长和缩小其缓冲池(缓存)的大小。只要有足够的内存可用于防止分页(4-10 MB 之间),SQL Server 缓冲池就会继续增长。当与 SQL Server 位于同一台计算机上的其他进程分配内存时,SQL Server 缓冲区管理器将根据需要释放内存。SQL Server 每秒可以释放和获取几兆字节的内存,使其能够快速适应内存分配的变化。