内存利用率为 98%,为什么不是 100%?

Sta*_*ser 3 sql-server memory sql-server-2008-r2

我想知道为什么 SQL Server 不使用所有可用内存 - 当我非常确定存在内存瓶颈时 100%。比如我管理的一台服务器,从使用91%的内存开始,逐渐增加到98而不是100。23:00重启后增加趋势如下:

  1. 重启后为 58%,整晚达到 79%。我想这应该是由于采取了隔夜备份。
  2. 到第二天 11:00 时为 82%。
  3. 12:00 前 90%
  4. 全天稳定趋势,直到 23:00 内存利用率增加到 93%
  5. 95% 次日早上 08:00
  6. 97% 在 17:00
  7. 98% 第二天 14:00 并留在那里。

什么可能导致这 2% 未被利用?Windows 操作系统是否有可能阻止它?如果是这样,我如何证明 Windows 确实将其保留给自己?

我指的是服务器的整体内存使用情况 - 即操作系统。最大内存配置已经设置得远远超出服务器的当前内存。我手头有一个用于跟踪内存利用率的监控工具。

服务器的内存利用率不低于或高于 98%。这是一个专用的、单实例的、两个数据库 SQL Server,没有其他服务、应用程序等在其上运行。SQL Server 可能正在使用大部分分配的内存 - 即 98% - 但我的问题是为什么它不使用其余的 2%?我不确定我在质疑那 2% 时是否变得太暴躁了?

感谢在Monitor memory usage 中查询Determining Current Memory Allocation我确认 Memory_usedby_Sqlserver_GB 是 64 GB 总 RAM 中的 60。我无法在DMV的输出中找到RAM 和总 RAM的列(可能是由于 SQL Server 2008 R2),但我可以确认它是 64 GB 的服务器并且最大。服务器内存设置为 2147483647 MB​​。max server memorysys.dm_os_process_memory

我不知道我的服务器在放入插槽后是否会使用任何额外的内存。我试图证明服务器是否需要更多内存,(如果需要)将使用它并因此促使购买。如果购买了内存并且内存利用率没有增加并保持当前状态 - 60 GB,我将处于尴尬的境地。在将服务器的内存从 64 GB 增加到 128 GB 之后看到使用了 60 GB 的 RAM 将是一种浪费。我想在此之前确定服务器是否会从新的额外 RAM 中受益或无动于衷。

小智 5

一切都需要内存,包括操作系统,就像 SQL Server 一样。操作系统可以从 SQL Server 中删除内存,除非您碰巧在 SQL Server 的内存权限中锁定了页面。然而,即便如此,操作系统仍将始终保持运行,因此如果它需要内存,它将迫使 SQL Server 放弃它。

同样,仅仅因为 SQL Server 占用了 98% 的内存并不一定意味着它正在使用所有内存。您必须深入了解 SQL Server 本身的内存使用情况才能知道它在做什么。它一直持有它,直到操作系统强制或以一种很好的方式请求它回来。

我还要注意,您不应该将最大内存设置为“远远超出服务器的当前内存”容量。SQL Server 认为它可以获取比实际更多的内存可能会导致性能问题。最大内存只是缓冲池限制,这不包括 SQL Server 进程的其他区域占用内存。所以最好保持最大内存较低,以便 SQL Server 的操作系统和其他进程有一些。

要深入了解性能,请使用 Perfmon、DVM,您的监控工具(如果它包括 SQL Server 监控)。

指定最大内存:我基于操作系统,但您还必须考虑服务器上运行的其他内容。您是否正在运行 SQL Server 的其他组件(SSIS、SSAS、SSRS)?您是否有任何用于监控或安全目的的代理?举个例子,我使用 Window Server 2012 R2 的基本价值是让 OS 6GB 的 RAM,其他所有东西都转到 SQL Server。

请参阅产品文档中的监控内存使用情况