首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在查询执行后检查其实际执行计划

问如何在查询执行后检查其实际执行计划
EN

Database Administration用户
提问于 2019-10-13 14:50:00
回答 2查看 774关注 0票数 2

在Server中,在查询执行之后,如何查看它的实际执行计划?

据我所知,只有估计的执行计划(而不是实际的执行计划)存储在计划缓存中。是这样吗?

注意:我们没有任何第三方监控工具。

EN

回答 2

Database Administration用户

回答已采纳

发布于 2019-10-14 13:25:45

如果正在运行Server 2012或更高版本,可以考虑创建扩展事件会话,并将其配置为捕获query_post_execution_showplan事件,以便在执行查询后捕获实际的执行计划。但是很明显,在执行查询之前,需要设置和启用会话。

但是,请注意,启用此事件会影响业绩,因此这可能是您想要打开的东西,为调查目的,然后再次关闭,一旦你捕获了你想要的计划。

票数 2
EN

Database Administration用户

发布于 2019-10-14 07:21:55

在Server 2019之前,不可能在查询执行之后获得实际的执行计划。

从Server 2019+开始,存在该选项。

首先,您应该更改数据库范围配置。

此选项支持与sys.dm_exec_query_plan_stats中的最后一个实际执行计划相当的功能(通过启用TF 2451可以实现相同的执行计划)。

代码语言:javascript
复制
ALTER DATABASE SCOPED CONFIGURATION SET LAST_QUERY_PLAN_STATS = ON;

请参阅有关更改数据库作用域配置(Transact-SQL)的更多信息

而不是像这样执行查询,以便获得实际的执行计划。

代码语言:javascript
复制
SELECT qps.query_plan, 
       st.text, 
       DB_NAME(st.dbid) DBName, 
       OBJECT_NAME(st.objectid) ObjectName, 
       cp.usecounts, 
       cp.size_in_bytes /1024 [Size in kB],
       cp.objtype,
   cp.cacheobjtype
FROM sys.dm_exec_cached_plans AS cp
     CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
     CROSS APPLY sys.dm_exec_query_plan_stats(plan_handle) AS qps
WHERE st.encrypted = 0
      AND DB_NAME(st.dbid) = 'AdventureWorks2016'
ORDER BY [Size in kB] DESC;

结果如下图所示。

票数 5
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/250955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档