web-dev-qa-db-ja.com

ストアドプロシージャの実行計画を表示するにはどうすればよいですか?

クエリの推定実行計画(Management Studio 9.0)を問題なく表示できますが、ストアドプロシージャに関しては、ALTER画面からコードをコピーして、それ以外の場合は、プロシージャではなく、ALTERのプランが表示されます。これを行った後でも、入力が欠落しているため、そのように宣言する必要があります。

ストアドプロシージャでこれを行う簡単な方法はありますか?

編集:うまくいくかもしれないと思ったが、よく分からない。

推定実行計画を実行できますか

exec myStoredProc 234
39
Joe Phillips
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
42
Matt Rogish

Storedprocedure名を選択し(クエリウィンドウに入力するだけ)、右クリックして、SQl Server Mgmt Studioのツールバーの[推定実行プランの表示]ボタンを選択します。 ストアドプロシージャコードを開く必要はありません。プロシージャ名だけを選択する必要があります。

呼び出されたプロシージャでのストアドプロシージャの計画もグラフィカル形式で表示されます。

24
Pradeep

SQL Management Studio 2008でストアドプロシージャを実行するときは、メニューの[クエリ]-> [実際の実行計画を含める]をクリックします。これもツールバーにあります

コメントを読んで実行すると問題になるようで、この問題を解決するために、最後にロールバックするトランザクションでストアドプロシージャの実行をラップすることをお勧めします

3
Jon

使用する

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

http://msdn.Microsoft.com/en-us/library/aa259203.aspx を参照してください。tmpテーブルを使用していない限り、これは機能すると思います

3
CPU_BUSY

少し前に回答が送信されたことは知っていますが、以下のクエリが役に立つと思います

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'
2
BI Dude

ここにスクリーンショットがあります。どこを探すべきかを理解するためにしばらく私を見てください。

enter image description here

1
VK_217

(クエリメニューから)実際の実行計画の表示を有効にして管理スタジオ(またはクエリアナライザー)でストアドプロシージャを実行すると、実行後にストアドプロシージャの計画が表示されます。あなたがそれを実行できない場合、推定実行計画が表示されます(私の経験では、それはしばしばより正確ではありませんが)

0
u07ch

プロファイラーを使用して実行計画を確認することもできます。パフォーマンス:計画統計プロファイルの表示オプションを含め、列にバイナリデータを含めるようにしてください。

その後、クエリまたはプロシージャを実行して、実行計画を確認できます。

編集

プロファイラーを使用できず、別のウィンドウを開きたくない場合は、ストアドプロシージャの先頭にコメントブロックを含めることをお勧めします。たとえば、次のことを想像してください。

/* 
     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

これにより、実行目的のみを強調表示し、実行計画の表示をオンにできるということです。そしてそれを実行します。

0
JoshBerke