我可以查看估计执行计划(Management Studio中9.0)的查询没有问题,但是当涉及到存储过程我没有看到一个简单的方法来做到这一点,而不从ALTER屏幕复制代码,并将其粘贴进入查询窗口,否则将显示ALTER的计划而不是程序。即使这样做后,任何输入都会丢失,我需要声明它们。如何显示存储过程的执行计划?
是否有更简单的方法来做到这一点的存储过程?
编辑: 我只是想到了一些可能工作,但我不知道。
我可以做
exec myStoredProc 234
我可以查看估计执行计划(Management Studio中9.0)的查询没有问题,但是当涉及到存储过程我没有看到一个简单的方法来做到这一点,而不从ALTER屏幕复制代码,并将其粘贴进入查询窗口,否则将显示ALTER的计划而不是程序。即使这样做后,任何输入都会丢失,我需要声明它们。如何显示存储过程的执行计划?
是否有更简单的方法来做到这一点的存储过程?
编辑: 我只是想到了一些可能工作,但我不知道。
我可以做
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
估计执行计划运行管理工作室(或查询分析器)与显示实际执行计划的存储过程(从查询菜单)功能会告诉你的计划存储过程后,你已经运行它。如果你不能在它上面运行的是显示估计的执行计划(虽然在我的经验,往往是不准确的。)
当SQL管理执行存储过程2008年Studio中,您可以点击查询 - >包括从菜单中实际执行计划...它也在工具栏上
通过阅读意见执行似乎是一个问题,并解决这个问题,我会建议将存储过程的执行包裹在一个事务中滚动回到底
虽然我实际上不能运行它。它需要估计。 – 2009-04-27 17:24:15
您还可以使用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
什么这使的是,你可以仅仅强调执行目的,并打开显示的执行计划。并运行它。
使用
SET SHOWPLAN_ALL ON
Go
exec myStoredProc 234
GO
SET SHOWPLAN_ALL OFF
GO
见http://msdn.microsoft.com/en-us/library/aa259203.aspx 只要你不使用TMP表,我认为这会工作
选择StoredProcedure的名字(只是在查询窗口中键入它)然后单击SQl Server Mgmt Studio工具栏中的“显示预计执行计划”按钮。 注意,你不必有存储过程的代码开放。只需选择过程名称即可。
从与被叫程序的存储过程的计划也将被以图形形式显示。
我知道答案前一阵子提交过,但我觉得以下有用
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'
查询你错过了我的问题点。当我使用“显示预计的执行计划”时,它显示了ALTER的计划,而不是实际的程序。 – 2009-04-27 17:23:24
对不起,我不清楚我的意思是运行我的意思是运行存储过程,而不是运行更改。在新窗口中 exec MySP'param1','param2' 并设置预计执行计划选项 – u07ch 2009-04-27 17:28:23
好吧,但无论如何我无法运行该过程,因为它会导致我的数据发生变化。 – 2009-04-27 17:37:24