sac*_*iee 2 sql-server execution-plan
在SQL Server中,我们如何在查询执行后查看其实际执行计划?
据我所知,只有估计的执行计划(而不是实际的执行计划)存储在计划缓存中。那是对的吗?
注意:我们没有任何第三方监控工具。
小智 6
在 SQL Server 2019 之前,查询执行后无法获取实际的执行计划。
从 SQL Server 2019+ 开始,存在该选项。
首先,您应该更改数据库范围配置。
此选项启用 sys.dm_exec_query_plan_stats 中最后一个实际执行计划的等效项(同样可以通过启用 TF 2451 来完成)。
ALTER DATABASE SCOPED CONFIGURATION SET LAST_QUERY_PLAN_STATS = ON;
Run Code Online (Sandbox Code Playgroud)
查看有关更改数据库范围配置 (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;
Run Code Online (Sandbox Code Playgroud)
结果如下图所示。