在Server中,在查询执行之后,如何查看它的实际执行计划?
据我所知,只有估计的执行计划(而不是实际的执行计划)存储在计划缓存中。是这样吗?
注意:我们没有任何第三方监控工具。
发布于 2019-10-14 13:25:45
如果正在运行Server 2012或更高版本,可以考虑创建扩展事件会话,并将其配置为捕获query_post_execution_showplan事件,以便在执行查询后捕获实际的执行计划。但是很明显,在执行查询之前,需要设置和启用会话。
但是,请注意,启用此事件会影响业绩,因此这可能是您想要打开的东西,为调查目的,然后再次关闭,一旦你捕获了你想要的计划。
发布于 2019-10-14 07:21:55
在Server 2019之前,不可能在查询执行之后获得实际的执行计划。
从Server 2019+开始,存在该选项。
首先,您应该更改数据库范围配置。
此选项支持与sys.dm_exec_query_plan_stats中的最后一个实际执行计划相当的功能(通过启用TF 2451可以实现相同的执行计划)。
ALTER DATABASE SCOPED CONFIGURATION SET LAST_QUERY_PLAN_STATS = ON;请参阅有关更改数据库作用域配置(Transact-SQL)的更多信息
而不是像这样执行查询,以便获得实际的执行计划。
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;结果如下图所示。

https://dba.stackexchange.com/questions/250955
复制相似问题