2012-02-15 11 views
11

現在実行中のストアドプロシージャがあり、特定のクエリでハング/ロックしているようです。どのようにクエリを見ることができますか?好ましくは、プロセスを変更することなく。ストアドプロシージャ内で現在実行されているクエリ

DBCC Inputbuffer (65) 

を使用して

は私に

言語イベント0 EXEC mySPを与えます。

敬具、 Cederlof

答えて

15
SELECT SUBSTRING(st.text, (r.statement_start_offset/2) + 1, 
       ((CASE WHEN r.statement_end_offset <= 0 
         THEN DATALENGTH(st.text) 
       ELSE r.statement_end_offset END - 
     r.statement_start_offset)/2) + 1) AS statement_text 
FROM sys.dm_exec_requests r 
     CROSS APPLY sys.dm_exec_sql_text(sql_handle) st 
WHERE session_id = 65 
+0

すごくうまくいくようです。 – cederlof

+0

WHERE session_id!= <このセッションID> –

+0

@GabrielMcAdamsの行を追加すると便利です - 質問の場合、特にセッションIDに興味があります ' (DBCC入力バッファ(65)から) –

1

SQLプロファイラを使用してください。その名前が示すように、SQL Serverの主要プロファイリングツールであり、プロシージャ内の各ステートメントの実行時間を表示できます。

+0

それは私の考えでもありましたが、私に示すのはSPをトリガするために使用される "EXEC mySP"クエリだけです。または私は不正なフィルタリングを使用していますか? – cederlof

+1

@cederlof - プロファイラで 'SP:StmtCompleted'イベントと' SP:StmtStarting'イベントを取得する必要があります。 –

関連する問題