SQL Server 内存使用率达到 99% 时性能不佳

SQL Server 内存使用率达到 99% 时性能不佳

我有一台服务器,报告称 8 GB 内存已使用 99%。重新启动 SQL Server 时,使用率会下降到约 5%,但在约 2 小时内逐渐回升至 99%。

当我查看 sqlserver 进程时,它显示只使用了 100k 内存,并且通常不会比这个数字高出太多或低于太多。事实上,如果我把 TaskManager 中的所有进程加起来,它只是触及了我总可用内存的表面(但 TaskManager 仍然显示“显示所有进程”时内存使用率为 99%)。

看来 SQL Server 发生了严重的内存泄漏,但并未报告。该服务器已运行近两年,但直到最近 3-4 周才开始出现此问题。

有人见过这个问题或者对这个问题有任何见解吗?

编辑

当服务器达到 99% 时,性能就会下降。对服务器、应用程序等的所有查询都会变得很慢。重新启动服务后,性能会恢复正常,直到 2 小时过去后,服务器再次达到 99%。

答案1

SQL 服务器会缓存尽可能多的数据——正如其他人所说,这是一件好事。它缓存的数据称为缓冲区缓存——但你需要限制这一点。

因此,你需要做的就是限制缓冲区缓存经验法则是 (Total_RAM - (2GB 或 10%(以较大者为准)) = 最大缓冲区缓存。如果不限制此缓存的大小,则服务器可能会开始遇到内存压力,因为操作系统和 SQL 开始争用内存。您可以在管理工作室中的 SQL 服务器属性的内存部分下找到此设置:

在此处输入图片描述

查看内存最佳实践Brent Ozar 的 SQL Server 部署清单(第二部分)了解更多详细信息。

由于这种情况是最近才发生的,我猜测有人通过安装或运行另一个软件造成了与 SQL 服务器的内存竞争。

最后,如果您想了解 SQL Server 实际为缓冲池使用了多少内存,请查看SQL Server Memory Manager: Total Server Memoryperfmon 计数器。这是缓冲池使用的内存量(而不是服务器总内存)。Taskman 不会显示此内存。

答案2

它之所以没有显示在任务管理器中,是因为它使用了 AWE,它会锁定并分配内存中的页面。由于内存不可分页,因此设置最大服务器内存非常重要。 http://blogs.msdn.com/b/psssql/archive/2009/09/11/fun-with-locked-pages-awe-task-manager-and-the-working-set.aspx

答案3

这不是泄漏;这是 SQL 应该工作的原因。它会占用所有可能的 RAM。出于这个原因,SQL 肯定应该是机箱中唯一的应用程序。如果您真的需要限制它,我相信您可以这样做,但如果 SQL 需要的 RAM 超过您为其设置的限制,那就只能求助于上帝了。

答案4

是的,这很可能是 SQL,并且您的 SQL 连接使用模式可能已发生改变。我相信 SQL 仅在请求该数据时才开始在 RAM 中缓存 SQL 数据,因此您最近可能收到了更多请求。除非您的 SQL 性能不佳,否则我会假设它正在做它应该做的事情。

相关内容