use*_*551 9 windows-server-2008 sql-server-2008
我有一台服务器报告 8 GB 的内存已用完 99%。当重新启动 Sql Server 时,它的使用率下降到大约 5%,但在大约 2 小时内逐渐恢复到 99%。
当我查看 sqlserver 进程时,它被报告为仅使用 100k ram,并且通常不会大幅上升或低于该数字。事实上,如果我将 TaskManager 中的所有进程加起来,它几乎没有触及我的可用总数的表面(但 TaskManager 仍然通过“显示所有进程”显示 99% 的内存使用率)。
似乎 Sql Server 发生了巨大的内存泄漏,但它没有报告它。服务器运行良好近两年,这仅在过去 3-4 周内才开始显现。
任何人都看过这个或对这个问题有任何见解?
编辑
当服务器达到 99% 时,性能下降。对服务器、应用程序等的所有查询都会爬行。重新启动服务使事情再次变得活泼,直到 2 小时过去了,服务器再次达到 99%。
Kyl*_*ndt 12
SQL Server 将缓存尽可能多的数据——正如其他人所说的那样。它缓存的数据称为缓冲区缓存——但您需要限制这一点。
所以你需要做的就是限制缓冲区缓存的大小来解决这个问题。经验法则是 (Total_RAM - (2GB 或 10% (以较大者为准)) = Max buffer cache。如果您不限制此缓存的大小,那么随着操作系统和 SQL 开始竞争,服务器可能会开始遇到内存压力用于内存。您可以在 management studio 中 SQL server properties 的 memory 部分下找到此设置:

查看第 ii 部分中Brent Ozar 的 SQL Server 部署清单中的内存最佳实践,了解有关此内容的更多详细信息。
由于最近开始发生这种情况,我猜测是有人通过安装或运行其他软件来与 SQL 服务器进行内存竞争。
最后,如果您想查看 SQL 服务器实际用于缓冲池的内存量,请查看SQL Server Memory Manager: Total Server Memoryperfmon 计数器。这是缓冲池正在使用的内存量(不是服务器总内存)。Taskman 不会显示此内存。
它没有出现在任务管理器中的原因是它使用了 AWE,它在内存中锁定和分配页面。这使得设置最大服务器内存很重要,因为内存不可分页。 http://blogs.msdn.com/b/psssql/archive/2009/09/11/fun-with-locked-pages-awe-task-manager-and-the-working-set.aspx
| 归档时间: |
|
| 查看次数: |
31879 次 |
| 最近记录: |