我们在一台拥有 24GB RAM 的 HP Server 上安装了 Windows 2008 R2。安装的唯一重要软件是 SQL Server 2008 R2,并且此 Windows 上几乎没有启用任何功能或角色。
但问题是 RAM 总是快满了。当我们在任务管理器或资源监视器或第三方程序的内存部分查看性能时,我们会看到 24GB RAM 的占用率约为 97%-99%,但所有进程使用的内存总和不到 1GB。
如果使用了该百分比的 RAM,为什么 Windows 无法显示哪些进程正在使用该内存量?如果没有,为什么 Windows 说 RAM 已满?
答案1
SQL Server 使用所有可用内存。这不是一个错误,而是设计使然。这就是为什么 SQL Server 必须安装在专用机器上(而不是与 IIS 一起安装)的原因。
当长时间运行时,SQL Server 根据执行的查询存储数据,以便稍后更快地执行它们。这意味着当您启动服务器时,内存使用量会很低,但会随着时间的推移而增长。
您可以调整 SQL Server 使用的内存限制,但除非有充分的理由,否则不应该这样做。
以下是一段引文如何使用 SQL Server 中的配置选项调整内存使用情况在 Microsoft 支持网站上:
启动 SQL Server 时,即使服务器上的活动较少,SQL Server 内存使用量也可能会持续稳定增加而不会减少。此外,任务管理器和性能监视器可能会显示计算机上可用的物理内存正在稳定减少,直到可用内存介于 4 到 10 MB 之间。
此行为本身并不表示存在内存泄漏。此行为是正常的,并且是 SQL Server 缓冲池的预期行为。
答案2
您可以使用内存地图找出哪个进程正在使用你的内存(以及如何使用)。
答案3
要指定 SQL Serve 使用的最大和最小内存量:
- 在 SQL Server Management Studio 对象资源管理器中右键单击 SQL Server 实例
- 选择特性
- 选择记忆标签
有关详细信息,请参阅此文章:最小和最大服务器内存的影响
至于每个特定进程的内存分配,你可以从Windows 资源监视器