Sql server 如何查找使用最多内存进行排序的查询
如何确定哪些查询在排序/联接等操作中使用的内存最多? 如何确定一个特定查询使用了多少内存 我希望能找到一些东西,比如为个人查询设置统计IO,以及一个DMV来找出最严重的违规者,但我找不到任何东西。:Sql server 如何查找使用最多内存进行排序的查询,sql-server,sql-server-2008-r2,Sql Server,Sql Server 2008 R2,如何确定哪些查询在排序/联接等操作中使用的内存最多? 如何确定一个特定查询使用了多少内存 我希望能找到一些东西,比如为个人查询设置统计IO,以及一个DMV来找出最严重的违规者,但我找不到任何东西。: 请求的\u内存\u kb:请求的内存总量(以kb为单位) 授予的\u内存\u kb:实际授予的内存总量(以kb为单位) 尝试此操作以查找个人高违规查询及其执行计划 -- Find single-use, ad-hoc queries that are bloating the plan cach
:请求的内存总量(以kb为单位)请求的\u内存\u kb
:实际授予的内存总量(以kb为单位)授予的\u内存\u kb
尝试此操作以查找个人高违规查询及其执行计划
-- 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;
此外,请访问博客并获取完整的诊断脚本(我在上面得到的)。他有一些非常棒的基于DMV的脚本来查找高IO/Mem/CPU查询(临时和SP)
祝你好运我单击了你的链接,第一行如下:“不必等待内存授予的查询将不会出现在此视图中。”如果我的查询使用了大量内存但不等待授予,该怎么办?在这种情况下,我应该使用什么?任何需要内存授予的查询(以及任何“使用大量内存”的查询)都会显示出来。一个简单的查询,如
select。。。从表中…
将不会显示,因为它在执行时基本上不需要内存。但是选择。。。从表中。。。order by[非索引列]
将显示,因为它需要排序,而排序需要内存。有关一般内存问题的调查,请参阅。您的问题是关于查询内存授予的。这会查找缓存中最大的执行计划,而不是那些在运行时请求最多内存的执行计划。