JHF*_*HFB 5 sql-server-2008 sql-server memory
一位数据库开发人员认为我们遇到了内存问题。他发现一些标准查询的运行时间有所增加——从不到 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 的查询检查。)
我还应该看哪里?我还应该检查什么?我想向数据库开发人员报告以确认他的怀疑或证明他们不正确。
编辑:修改了我的实际问题。我欣赏并同意,由于内存问题以外的原因,这些查询很可能会变慢。然而,我处于一种情况,我需要证明内存不是全面的罪魁祸首。也就是说,证明少数查询由于其他原因而变慢并不能完成我的任务。我想了解我可以从哪里获得此类信息以及我应该检查哪些指标。
Rem*_*anu 13
证明不是记忆问题的唯一方法是证明是别的东西。这要求您确定性能问题的根本原因。我建议您遵循Waits 和 Queues 之类的方法。SQLCAT 团队还发布了您可以关注的故障排除流程图海报。
作为一般性评论:如果有人提议您在服务器上购买更多内存,只需说YES,然后继续进行根本原因分析。如果问题的根本原因是表扫描,则 SQL Server 始终可以使用更多内存并不重要。
为了仅解决您的开发人员所关心的问题(即证明内存不是问题),您可以首先证明查询没有等待内存授予,并且页面预期寿命处于合适的数字。
记忆补助(来自格伦贝瑞):
-- Shows the memory required by both running (non-null grant_time)
-- and waiting queries (null grant_time)
-- SQL Server 2008 version
SELECT DB_NAME(st.dbid) AS [DatabaseName], mg.requested_memory_kb, mg.ideal_memory_kb,
mg.request_time, mg.grant_time, mg.query_cost, mg.dop, st.[text]
FROM sys.dm_exec_query_memory_grants AS mg
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
ORDER BY mg.requested_memory_kb DESC;
Run Code Online (Sandbox Code Playgroud)
页面预期寿命:
SELECT [object_name],
[counter_name],
[cntr_value]
FROM sys.dm_os_performance_counters
WHERE [object_name] LIKE '%Manager%'
AND [counter_name] = 'Page life expectancy'
Run Code Online (Sandbox Code Playgroud)
从那里,我会遵循评论中的建议并确定实际问题是什么,而不是关注问题不是什么。