(这是索引是否消耗内存的延续?)
一位数据库开发人员认为我们遇到了内存问题。他发现一些标准查询的运行时间有所增加——从不到 10 秒增加到大约两分半钟。他查看了服务器上的任务管理器,发现内存使用率很高,现在想占用一些当前分配给操作系统的内存并将其释放给 SQL Server。
我们在 SQL Server 2008 上,一台 64 位机器,未启用 AWE,最小 4096 MB,最大 10240 MB。
我发现 Brent Ozar 的A Sysadmin's Guide to Microsoft SQL Server Memory表明任务管理器不可靠。我还发现我们的页面预期寿命并不表示内存压力。(通过Pinal Dave 的查询检查。)
我还应该去哪里看?我还应该检查什么?我想向数据库开发人员报告,以证实他的怀疑或证明他们是不正确的。
编辑:修改了我的实际问题。我很欣赏并同意,由于内存问题以外的原因,这些查询极有可能变慢。然而,我处于一种情况,我需要证明记忆不是全面的罪魁祸首。也就是说,证明少数查询由于其他原因变慢并不能完成我的任务。我想了解在哪里可以获得此类信息以及我应该检查哪些指标。
证明不是内存问题的唯一方法是证明是其他问题。而这需要您确定性能问题的根本原因。我建议您遵循Waits 和 Queues 之类的方法。SQLCAT 团队还发布了故障排除流程图海报,您可以关注该海报。
作为一般性评论:如果有人提议您在服务器上购买更多内存,只需说“是”,然后继续进行根本原因分析。如果问题的根本原因是表扫描并不重要,SQL Server 总是可以使用更多的内存。
为了仅解决您的开发人员的顾虑(即证明内存不是问题),您可以首先证明查询没有等待内存授予,并且页面预期寿命处于一个舒适的数字。
内存补助(来自 Glen Berry):
页面预期寿命:
从那里开始,我会遵循评论中的建议并确定实际问题是什么,而不是关注问题不是什么。