Sql server MSSQL空查询计划
我正在执行下面的查询以获取缓存的执行计划详细信息。我看到一些存储过程的查询计划为空。原因可能是什么?这是否意味着我的问题需要改进Sql server MSSQL空查询计划,sql-server,stored-procedures,Sql Server,Stored Procedures,我正在执行下面的查询以获取缓存的执行计划详细信息。我看到一些存储过程的查询计划为空。原因可能是什么?这是否意味着我的问题需要改进 SELECT plan_handle,usecounts, cacheobjtype, objtype, size_in_bytes, text,query_plan FROM sys.dm_exec_cached_plans CROSS APPLY sys.dm_exec_sql_text(plan_handle) CROS
SELECT plan_handle,usecounts, cacheobjtype, objtype, size_in_bytes, text,query_plan
FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_sql_text(plan_handle)
CROSS APPLY sys.dm_exec_query_plan(plan_handle)
WHERE objtype = 'Proc'
ORDER BY usecounts DESC;
在某些情况下,
query\u plan
列中不会返回任何输出,如下所述:
在以下情况下,系统不会返回Showplan输出:
sys.dm\u exec\u query\u plan返回表的query\u plan列:
- 如果使用计划句柄指定的查询计划已从计划缓存中退出,则返回表的query\u plan列为空。例如,如果在捕获计划句柄和将其用于sys.dm_exec_query_plan之间存在时间延迟,则可能发生此情况
- 某些Transact-SQL语句未缓存,例如批量操作语句或包含大于8 KB字符串文本的语句。无法使用sys.dm_exec_query_plan检索此类语句的XML showplan,除非批处理当前正在执行,因为它们不在缓存中
- 如果Transact-SQL批处理或存储过程包含对用户定义函数的调用或对动态SQL的调用,例如使用EXEC(字符串),则批处理或存储过程的sys.dm_EXEC_query_plan返回的表中不包括用户定义函数的已编译XML Showplan。相反,必须单独调用sys.dm_exec_query_plan以获取对应于用户定义函数的计划句柄
查询计划
列中不会返回任何输出,如下所述:
在以下情况下,系统不会返回Showplan输出:
sys.dm\u exec\u query\u plan返回表的query\u plan列:
- 如果使用计划句柄指定的查询计划已从计划缓存中退出,则返回表的query\u plan列为空。例如,如果在捕获计划句柄和将其用于sys.dm_exec_query_plan之间存在时间延迟,则可能发生此情况
- 某些Transact-SQL语句未缓存,例如批量操作语句或包含大于8 KB字符串文本的语句。无法使用sys.dm_exec_query_plan检索此类语句的XML showplan,除非批处理当前正在执行,因为它们不在缓存中
- 如果Transact-SQL批处理或存储过程包含对用户定义函数的调用或对动态SQL的调用,例如使用EXEC(字符串),则批处理或存储过程的sys.dm_EXEC_query_plan返回的表中不包括用户定义函数的已编译XML Showplan。相反,必须单独调用sys.dm_exec_query_plan以获取对应于用户定义函数的计划句柄