2011-10-14 19 views
19

私は以下のようなストアドプロシージャを持っています: SP1、SP2、.....、SP10 これらのストアドプロシージャはいくつかのことを行います。 次の手順を実行する必要があります。 EXECUTE SP1; EXECUTE SP2; ... EXECUTE SP10;SQL Serverでストアドプロシージャの実行時間を見つける方法は?

これらのプロシージャの実行を完了するためにSQL Serverが完了すると、これらのストアドプロシージャによって発生した行の変更を示す10行が表示されます。 私がしたいことは、すべてのストアドプロシージャを実行した後にSQL Serverは出力ウィンドウに各ストアドプロシージャの実行時間を与えます。 私はこれを行うことはできますか?私はこの作業を達成するためにストアドプロシージャを変更する必要があると確信していますが、私はそれをどうするか考えていません... 助けてください。おかげさまで tsqlの開始前

+1

は、あなたはをあなたのカスタム書いたアプリからストアドプロシージャを呼び出す?もしそうなら、どんな言語ですか? – Koekiebox

答えて

13

この目的でSql Server Profilerを使用すると、実行されたそれぞれに沿って多くの有用な情報が提供されますクエリとストアドプロシージャも同様です。

  1. DECLARE 2 datetime型の変数:開始/終了
  2. SET開始

    MSDN: SQL Profiler Data Columns

    SQLプロファイラは、各イベント

    他の簡単な方法の実行時間を表示します= GETDATE()

  3. EXEC SP_NAME
  4. SETエンド= GETDATE()
  5. 実行時間 - エンド間の差と管理のスタジオまたはすることができます出力ペインといくつかの他の環境を想定し
0

capture and display execution time

datetimeタイプ の使用2つのパラメータとgetdate()を使用して1セットのストアドプロシージャで

tsqlgetdate()を使用して、第2セット、最終的には違い

を取得するために datediff機能を使用
20

を開始します。

SET STATISTICS TIME ON 
EXEC SP1 
EXEC SP2 
... 
SET STATISTICS TIME OFF 
3

は、SQL Serverのプロファイラとして、このツールを使用して行う方法がありますが、簡単な方法は、時間印刷するラインで囲まれた各PROCを実行することです:

print convert(varchar, getdate(), 21) 
EXEC PROC SP1 
print convert(varchar, getdate(), 21) 
+0

なぜあなたはvarcharに変換しますか?基本的には、プロシージャを実行する前後のミリ秒の差をとるだけです。 –

+0

「2011-10-14 12:32:39.403'」のような書式設定された出力を得ることができます。それをdatetimeとして残しても、必ずしもミリ秒が与えられるとは限りません。無人の場合に備えて**の実行時に**の差分が失われます。 – Widor

+0

ありがとうございました。 – Azeem

4
declare @start datetime = getdate() 

-- your SQL statements 
exec dbo.MyStoredProcedure 

declare @executionTimeInMilliseconds int = datediff(ms, @start, getdate()) 
関連する問題