Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何查找使用最多内存进行排序的查询_Sql Server_Sql Server 2008 R2 - Fatal编程技术网

Sql server 如何查找使用最多内存进行排序的查询

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

如何确定哪些查询在排序/联接等操作中使用的内存最多? 如何确定一个特定查询使用了多少内存

我希望能找到一些东西,比如为个人查询设置统计IO,以及一个DMV来找出最严重的违规者,但我找不到任何东西。

:

  • 请求的\u内存\u kb
    :请求的内存总量(以kb为单位)
  • 授予的\u内存\u kb
    :实际授予的内存总量(以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[非索引列]
将显示,因为它需要排序,而排序需要内存。有关一般内存问题的调查,请参阅。您的问题是关于查询内存授予的。这会查找缓存中最大的执行计划,而不是那些在运行时请求最多内存的执行计划。