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以获取对应于用户定义函数的计划句柄