如何显示存储过程的执行计划?

问题描述 投票:38回答:8

我可以毫无问题地查看查询的估计执行计划(Management Studio 9.0)但是当涉及到存储过程时,我没有看到一种简单的方法来执行此操作,而无需从ALTER屏幕复制代码并将其粘贴到查询窗口,否则它将显示ALTER的计划而不是程序。即使在这样做之后,任何输入都会丢失,我需要将它们作为DECLARE。

在存储过程中有更简单的方法吗?

编辑:我只想到可能有用的东西,但我不确定。

我可以执行估计的执行计划吗?

exec myStoredProc 234
sql-server stored-procedures optimization ssms
8个回答
42
投票
SET SHOWPLAN_ALL ON
GO

-- FMTONLY will not exec stored proc
SET FMTONLY ON
GO

exec yourproc
GO

SET FMTONLY OFF
GO

SET SHOWPLAN_ALL OFF
GO

24
投票

选择storedprocedure名称(只需在查询窗口中键入),右键单击,然后选择SQl Server Mgmt Studio工具栏中的“显示估计执行计划”按钮。请注意,您不必打开存储过程代码。只需选择过程名称即可。

来自调用过程的存储过程的计划也将以图形形式显示。


3
投票

在SQL Management Studio 2008中执行存储过程时,可以从菜单中单击“查询” - >“包含实际执行计划”...也可以在工具栏上单击

阅读完评论后,执行似乎是一个问题,为了解决这个问题,我建议在最后回滚的事务中包装存储过程的执行


3
投票

使用

SET SHOWPLAN_ALL ON
Go
exec myStoredProc 234
GO
SET SHOWPLAN_ALL OFF
GO

请参阅http://msdn.microsoft.com/en-us/library/aa259203.aspx只要您不使用tmp表我认为这将有效


2
投票

我知道答案是在不久前提交的,但我发现下面的查询很有用

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

SELECT  [ProcedureName]          =   OBJECT_NAME([ps].[object_id], [ps].[database_id]) 
       ,[ProcedureExecutes]      =   [ps].[execution_count] 
       ,[VersionOfPlan]          =   [qs].[plan_generation_num]
       ,[ExecutionsOfCurrentPlan]    =   [qs].[execution_count] 
       ,[Query Plan XML]         =   [qp].[query_plan]  

FROM       [sys].[dm_exec_procedure_stats] AS [ps]
       JOIN [sys].[dm_exec_query_stats] AS [qs] ON [ps].[plan_handle] = [qs].[plan_handle]
       CROSS APPLY [sys].[dm_exec_query_plan]([qs].[plan_handle]) AS [qp]
WHERE   [ps].[database_id] = DB_ID() 
       AND  OBJECT_NAME([ps].[object_id], [ps].[database_id])  = 'TEST'

1
投票

这是一个截图。给我一点时间来弄清楚在哪里寻找。

enter image description here


0
投票

在管理工作室(或查询分析器)中运行存储过程并显示实际执行计划(从查询菜单),将在运行后显示存储过程的计划。如果你不能运行它会显示估计的执行计划(虽然根据我的经验,往往不太准确。)


0
投票

您还可以使用Profiler查看执行计划。您需要包含Performance:Show Plan Statistics Profile选项,并确保在列中包含二进制数据。

然后,您可以运行任何查询或过程并查看执行计划。

编辑

如果您不能使用分析器,并且您不想打开另一个窗口,我建议您在存储过程开始时包含注释块。例如,想象如下:

/* 
     Description: This procedure does XYZ etc...
     DevelopedBy: Josh
     Created On:  4/27/09

     Execution: exec my_procName N'sampleparam', N'sampleparam'
*/

ALTER PROCEDURE  my_procName
   @p1 nvarchar(20),
   @p2 nvarchar(20)

AS

这允许您只需突出执行目的并启用show执行计划。并运行它。

© www.soinside.com 2019 - 2024. All rights reserved.