我正在开发一个.NET程序来检索给定数据库中所有存储过程的执行计划。我将在程序端解析这些XML。
SET SHOWPLAN_XML ON
并执行程序给出计划。但是,问题是需要传递过程的所有参数。
有没有办法在不传递存储过程的任何参数的情况下检索执行计划,只提供程序的名称?
答案 0 :(得分:1)
是的,您可能希望查看plan cache - SQL Server缓存所有执行计划,并允许您使用DMVs查看它们。例如,以下是一个基本查询,它将列出所有缓存的查询计划(作为xml)及其SQL文本。在大多数数据库中,您还需要添加其他过滤子句,将结果过滤到您感兴趣的计划中。
SELECT UseCounts, Cacheobjtype, Objtype, 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)
请注意,这些计划仅包含估计的执行计划,不包含“实际”值(例如实际读取次数)。此外,您无法使用它来获取加密存储过程的查询计划。
另请参阅How do I obtain a Query Execution Plan?,Tools for visualising execution xml plans as HTML也可能对“解析XML”部分有用。