クエリの推定実行計画(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
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'
(クエリメニューから)実際の実行計画の表示を有効にして管理スタジオ(またはクエリアナライザー)でストアドプロシージャを実行すると、実行後にストアドプロシージャの計画が表示されます。あなたがそれを実行できない場合、推定実行計画が表示されます(私の経験では、それはしばしばより正確ではありませんが)
プロファイラーを使用して実行計画を確認することもできます。パフォーマンス:計画統計プロファイルの表示オプションを含め、列にバイナリデータを含めるようにしてください。
その後、クエリまたはプロシージャを実行して、実行計画を確認できます。
編集
プロファイラーを使用できず、別のウィンドウを開きたくない場合は、ストアドプロシージャの先頭にコメントブロックを含めることをお勧めします。たとえば、次のことを想像してください。
/*
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
これにより、実行目的のみを強調表示し、実行計画の表示をオンにできるということです。そしてそれを実行します。