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

我有一个服务器,报告8 GB的内存使用率达到99%。 当重新启动Sql Server时,它会下降到大约5%的使用率,但是在大约2个小时内逐渐恢复到99%。

当我看着sqlserver进程时,它报告只使用100k内存,并且一般不会超过这个数字。 实际上,如果我将TaskManager中的所有进程加起来,它几乎不能抓到我可用的总体表面(但TaskManager仍然显示99%的内存使用率,显示“所有进程”)。

看来,Sql Server有一个巨大的内存泄漏,但它不报告。 服务器已经运行了近两年,这只是在过去的3-4周才开始显现。

任何人看到这个或有任何洞察到问题?

编辑

当服务器达到99%时,性能下降。 所有对服务器,应用程序等的查询都会被抓取。 重新启动服务使事情再次活跃起来,直到2小时过去,服务器再次达到99%。

SQL服务器将caching尽可能多的数据,正如其他人所说的那样。 这个caching数据被称为缓冲区caching – 但是你需要限制这个。

所以你需要做什么来解决这个问题是限制缓冲区caching的大小。 经验法则是(Total_RAM – (2GB或10%(以较大者为准))=最大缓冲区caching如果不限制caching的大小,那么当OS和SQL开始竞争时,服务器可能开始遇到内存压力你可以在management studio的SQL server属性的内存部分find这个设置:

在这里输入图像说明

在第二部分的Brent Ozar的SQL Server部署清单中查看内存最佳实践,了解更多关于此的详细信息。

自从最近发生这种情况以来,我的猜测是有人通过安装或运行另一个软件来与SQL服务器build立内存竞争。

最后,如果你想看看有多less内存SQL服务器实际用于缓冲池看SQL Server Memory Manager: Total Server Memory perfmon计数器。 这是缓冲池正在使用的内存量(不是总的服务器内存)。 工作人员不会显示这个记忆。

它没有出现在任务pipe理器中的原因是它使用AWE,在内存中locking和分配页面。 由于内存不可分页,因此设置Max Server内存很重要。 http://blogs.msdn.com/b/psssql/archive/2009/09/11/fun-with-locked-pages-awe-task-manager-and-the-working-set.aspx

这不是泄漏; 这是SQL应该工作。 它抓住所有的RAM。 SQL是绝对是盒子上唯一的应用程序,因为这个原因。 如果你真的需要限制它,我相信你可以做到这一点,但如果SQL需要更多的内存,天堂会帮助你。

是的,这可能是SQL,并且可能已经从SQL连接更改为您的使用模式。 我相信当数据被请求时,SQL只开始在RAM中cachingSQL数据,所以最近你可能会有更多的请求。 除非你的SQL性能很差,否则我会认为它正在做它应该做的事情。

我不确定为什么这个行为在过去的几个星期里会发生变化,但是听起来像SQL Server是按照devise行事的。 它通常会保留尽可能多的内存,达到最大服务器内存限制,只有在其他进程确实需要时才放弃它。 认为SQL应该放弃内存的时间以及SQL认为应该放弃内存的时间显然不同步。 这很好,不是一般的,这就是为什么你有控制权来清除这个问题。 设置最大服务器内存参数,以允许操作系统和后台应用程序一些内存,你会没事的。

这里有一个洞察力的职位,以帮助您的理解 – http://sqlblog.com/blogs/jonathan_kehayias/archive/2009/08/24/troubleshooting-the-sql-server-memory-leak-or-understanding-sql-server-memory -usage.aspx

此外,请查看此页面上的第3号,了解为什么在检查x64 SQL Server的内存使用情况时,“任务pipe理器”是错误的工具 – http://blogs.msdn.com/b/psssql/archive/2009/09/11/乐趣与locking的页面-令人惊叹的任务pipe理器和最工薪set.aspx