【问题标题】:How to read query execution plan for multiple stored procedures dynamically如何动态读取多个存储过程的查询执行计划
【发布时间】:2021-12-13 17:48:12
【问题描述】:

我的要求是读取多个存储过程的实际/估计执行计划,并希望将其 XML 保存到表中以供进一步分析。

CREATE TABLE SPPlans
(
  SPNAME VARCHAR(100),
  QUERYPLAN XML
)

我正在寻找一些可以为表中给出的每个 SP 提供实际或估计查询执行计划的查询。我尝试了类似下面的方法,但它没有为每个 SP 提供查询计划。你能在这里提出一些建议吗?

SELECT
    qp.query_plan, 
    OBJECT_NAME(QP.objectid) as [Procedure]    
FROM sys.dm_exec_cached_plans AS CP
CROSS APPLY sys.dm_exec_sql_text( plan_handle)AS SQLText
CROSS APPLY sys.dm_exec_query_plan( plan_handle)AS QP
join sys.objects as so on so.[object_id]=QP.objectid
WHERE objtype = 'Proc' AND OBJECT_NAME(QP.objectid) in ('Proc1','Proc2'..)

【问题讨论】:

  • 它只会用于实际执行的过程。除非您在运行查询时使用SET STATISTICS XML ON,否则无法获得实际计划。 CROSS APPLY sys.dm_exec_sql_text( plan_handle)AS SQLText 在这里似乎是多余的

标签: sql-server ssms sql-execution-plan


【解决方案1】:

打开Query Store 以跟踪估计的执行计划以及查询资源利用率和等待时间的运行时摘要。参见例如sys.query_store_plan

或使用 query_post_execution_showplan Extended Event 将实际执行计划捕获到文件中。

【讨论】:

    猜你喜欢
    • 2015-09-01
    • 1970-01-01
    • 2020-04-04
    • 2022-10-05
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多