SQL 2008 内存使用情况

SQL 2008 内存使用情况

我在 Windows Server 2008 R2 Enterprise 服务器上运行 SQL Server 2008(版本 10.0.1600),该服务器具有 8 GB 的物理内存。如果我打开任务管理器,我可以在“性能”选项卡的“物理内存”部分看到,总共 8191 MB 中只有 340 MB 可用,但我看不到任何使用如此大内存量的进程。请注意,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

这是什么意思?有什么方法可以释放这部分内存供其他进程使用吗?为什么虚拟大小被算作分配的内存?我以为虚拟大小只是“保留内存”。

答案1

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

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

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

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

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

答案2

由于 SQL Server 分配内存的方式(特别是启用 AWE 的情况下),任务管理器和进程资源管理器不会准确指示它实际使用了多少 RAM。要获得正确的数字,您必须直接询问 SQL Server。最简单的方法是运行 perfmon,并添加计数器 SQLServer:Memory Manager/Total Server Memory。该计数器将报告以 KB 为单位的总内存使用量。

现在,如果 SQL Server 使用了限制的 6000 MB,那么这是完全正常(且可取)的行为。如果它使用的内存远远超过这个数字,那么可能会出现问题。

相关内容