如何查找使用大多数内存进行排序的查询

时间:2012-01-17 21:14:01

标签: sql-server sql-server-2008-r2

如何确定哪些查询对排序/连接/等使用的内存最多? 如何确定一个特定查询消耗了多少内存?

我希望能找到类似SET STATISTICS IO ON的个人查询,以及找出最严重罪犯的DMV,但我找不到任何东西。

2 个答案:

答案 0 :(得分:5)

sys.dm_exec_query_memory_grants

  
      
  • requested_memory_kb:请求的内存总量,以千字节为单位
  •   
  • granted_memory_kb:实际授予的内存总量,以千字节为单位。
  •   

答案 1 :(得分:1)

尝试此操作以查找单个高罪犯查询及其执行计划

-- Find single-use, ad-hoc queries that are bloating the plan cache
SELECT TOP(100) [text], cp.size_in_bytes
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_sql_text(plan_handle) 
WHERE cp.cacheobjtype = N'Compiled Plan' 
AND cp.objtype = N'Adhoc' 
AND cp.usecounts = 1
ORDER BY cp.size_in_bytes DESC;

此外,请访问Glen Berry's博客并获取完整的诊断脚本(我在上面的位置)。他有一些非常棒的基于DMV的脚本来查找高IO /内存/ CPU查询(AdHoc和SP)。

祝你好运