我可以毫无问题地查看查询的估计执行计划(Management Studio 9.0)但是当涉及到存储过程时,我没有看到一种简单的方法来执行此操作,而无需从ALTER屏幕复制代码并将其粘贴到查询窗口,否则它将显示ALTER的计划而不是程序。即使在这样做之后,任何输入都会丢失,我需要将它们作为DECLARE。
在存储过程中有更简单的方法吗?
编辑:我只想到可能有用的东西,但我不确定。
我可以执行估计的执行计划吗?
exec myStoredProc 234
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
选择storedprocedure名称(只需在查询窗口中键入),右键单击,然后选择SQl Server Mgmt Studio工具栏中的“显示估计执行计划”按钮。请注意,您不必打开存储过程代码。只需选择过程名称即可。
来自调用过程的存储过程的计划也将以图形形式显示。
在SQL Management Studio 2008中执行存储过程时,可以从菜单中单击“查询” - >“包含实际执行计划”...也可以在工具栏上单击
阅读完评论后,执行似乎是一个问题,为了解决这个问题,我建议在最后回滚的事务中包装存储过程的执行
使用
SET SHOWPLAN_ALL ON
Go
exec myStoredProc 234
GO
SET SHOWPLAN_ALL OFF
GO
请参阅http://msdn.microsoft.com/en-us/library/aa259203.aspx只要您不使用tmp表我认为这将有效
我知道答案是在不久前提交的,但我发现下面的查询很有用
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'
在管理工作室(或查询分析器)中运行存储过程并显示实际执行计划(从查询菜单),将在运行后显示存储过程的计划。如果你不能运行它会显示估计的执行计划(虽然根据我的经验,往往不太准确。)
您还可以使用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执行计划。并运行它。