回答:
Kevinの回答では、SQL Trace / SQL Profilerでキャプチャするイベントについて説明しています。その答えを少し広げるとSP:StmtCompleted
、ストアドプロシージャ内の各ステートメントが聞こえるように表示されます。
また、忙しいシステムでパフォーマンスの問題を診断しようとしている場合は、SQLプロファイラーに注意する必要があります。SQLプロファイラーは、ファイルへのトレースや拡張イベントの使用よりもはるかに低速です。Jonathan Kehayiasによるこのブログ投稿では、SQL Profilerの使用によるシステムパフォーマンスの約90%のオーバーヘッドと、ファイルへのトレースによる約10%のオーバーヘッドが示されています。拡張イベントの場合は少なくなります。そのため、通常はSQLプロファイラー自体を実行しないことをお勧めします。
この情報は拡張イベントを通じて入手できますが、SQLトレース(SQLプロファイラーの背後にある技術)を引き続き使用することをお勧めしますが、代わりにファイルにトレースします(拡張イベントの学習と使用に投資したい場合、これは進むべき道です。SQLServerの将来のバージョンでは、SQLトレースはなくなり、拡張イベントのみとなります)。また、必要なものだけをキャプチャしていることを確認するために、できる限り多くのバックグラウンドノイズを列フィルターボタンでフィルタリングすることをお勧めします。プロファイラーツールを使用して、Kevinが良い答えで説明した手順を使用してトレースをセットアップし、同じGUIからフィルターを追加できます。次に、トレースをスクリプトとしてエクスポートし、そのスクリプトをSQL Serverトレースで、データベースまたはトランザクションログファイルを含まないフォルダー上のファイルに実行できます。エクスポートするには、単にトレースをセットアップし、数秒間実行して必要なものをキャプチャしていることを確認してから停止し、メニューバーに移動してFile
->Export
-> Script Trace Definition
ファイルを保存します。次に、トレースするサーバー上の新しいクエリウィンドウでそのファイルを開きます。ここから開始して作成したスクリプトで使用されているさまざまなストアドプロシージャのヘルプ記事を参照すると、作成したこのスクリプトのオプションと定義の詳細を確認できます。
時間があり、学習したい場合は、拡張イベントに関する記事を読んで、情報をキャプチャする方法も参照してください。Jonathan Kehayiasは、ブログを開始する準備が整ったときにブログを投稿するための優れたリソースです。
SQL Server Profilerを使用して、ストアドプロシージャの個々のステートメントをキャプチャできます。これを行うには、[イベントの選択]タブで[すべてのイベントを表示]チェックボックスをクリックします。次に、[ストアドプロシージャ]カテゴリまで下にスクロールし、[ SP:StmtCompleted]の横のボックスをオンにします。あなたも持っている場合はBatchStarted:SQLおよびSQL:BatchCompletedの選択したイベントを、あなたは、SPIDにより、すべて一緒にそれを結ぶ、ストアドプロシージャの実行の開始・ツー・エンドの画像を得ることができます。
また、プランキャッシュを調べて、実行速度の遅い手順のクエリプランを取得できるかどうかを確認することも役立ちます。次のようなものから始めることができます。
SELECT
OBJECT_NAME(st.objectid,st.dbid) AS ObjectName,
cp.usecounts AS ExecutionCount,
st.TEXT AS QueryText,
qp.query_plan AS QueryPlan
FROM
sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) AS qp
CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) AS st
WHERE
cp.objtype = 'Proc'
AND OBJECT_NAME(st.objectid,st.dbid) = 'YourStoredProcedure';