如何确定哪些查询对排序/连接/等使用的内存最多? 如何确定一个特定查询消耗了多少内存?
我希望能找到类似SET STATISTICS IO ON的个人查询,以及找出最严重罪犯的DMV,但我找不到任何东西。
答案 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)。
祝你好运