2012-05-26 5 views
11

SQL Server 2012で実行されているSQLクエリを見つけることができるプログラムまたはSQLクエリがありますか? SQL Serverの以前のバージョンには、実際のクエリコンテンツが表示されるツールやストアドプロシージャ名があると思いますか?SQL Serverで現在実行されているクエリ

+1

SQLプロファイラを使用し、そうではありませんか? :) –

答えて

6

ここでは、SQLプロファイラhttp://msdn.microsoft.com/en-us/library/bb500441.aspxをインストールするために必要なものです。しかし、あなたが本番環境でそれをやろうと思っているなら、この1つを読むことをお勧めします。http://blog.sqlauthority.com/2009/08/03/sql-server-introduction-to-sql-server-2008-profiler-2/ クエリを見て、他のより良い方法がありますが、これを見て、それが http://www.youtube.com/watch?v=vvziPI5OQyE

4

このツールはSQL Server Profilerと呼ばれ、まだ標準ツールセットの一部です。

+0

「SQL Server Profiler」はどこですか?私のMS SQL Server 2012には、「パフォーマンスツール」フォルダはありません。私は他のツールを見ません。どのようにこれらのツールをインストールしますか。私はすべてがインストールされていると思った。 ProfilerはまだSQL Server 2012にありますか?これらのツールはどこにインストールされていますか? – iefpw

+0

非特急版では、管理ツールオプションが付属しています。エクスプレス版にはプロファイラ – SqlACID

22

あなたの権限に応じて、このクエリはうまくいくかもしれない:

SELECT sqltext.TEXT, 
req.session_id, 
req.status, 
req.command, 
req.cpu_time, 
req.total_elapsed_time 
FROM sys.dm_exec_requests req 
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS sqltext 

は参考:http://blog.sqlauthority.com/2009/01/07/sql-server-find-currently-running-query-t-sql

+2

が含まれていません。これはうまくいきますが、パラメータ値を調べる方法はありますか? – jtate

3

に役立ちますかどうかを確認これは、SQL ServerのDMVのアクション帳でから、あります:

出力はSPID(プロセスID)を示し、 ecid(これは同じspid内のスレッドと似ており、並列実行されているクエリの識別に役立ちます)、SQLを実行しているユーザ、ステータス(SQLが実行中か待機中か)、待機ステータス(待機中) 、ホスト名、ドメイン名、および開始時刻(バッチが実行されている時間を判断するのに便利です)。

nice部分は、クエリと親クエリです。これは、たとえば、ストアドプロシージャを親として、ストアドプロシージャを実行中のクエリを示します。それは私のために非常に便利でした。私はこれが他の誰かを助けることを望む。

USE master 
GO 
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 
SELECT 
er.session_Id AS [Spid] 
, sp.ecid 
, er.start_time 
, DATEDIFF(SS,er.start_time,GETDATE()) as [Age Seconds] 
, sp.nt_username 
, er.status 
, er.wait_type 
, SUBSTRING (qt.text, (er.statement_start_offset/2) + 1, 
((CASE WHEN er.statement_end_offset = -1 
THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2 
ELSE er.statement_end_offset 
END - er.statement_start_offset)/2) + 1) AS [Individual Query] 
, qt.text AS [Parent Query] 
, sp.program_name 
, sp.Hostname 
, sp.nt_domain 


FROM sys.dm_exec_requests er 
INNER JOIN sys.sysprocesses sp ON er.session_id = sp.spid 
CROSS APPLY sys.dm_exec_sql_text(er.sql_handle)as qt 
WHERE session_Id > 50 
AND session_Id NOT IN (@@SPID) 
ORDER BY session_Id, ecid 
14

私は以下のクエリ

SELECT SPID  = er.session_id 
    ,STATUS   = ses.STATUS 
    ,[Login]  = ses.login_name 
    ,Host   = ses.host_name 
    ,BlkBy   = er.blocking_session_id 
    ,DBName   = DB_Name(er.database_id) 
    ,CommandType = er.command 
    ,ObjectName  = OBJECT_NAME(st.objectid) 
    ,CPUTime  = er.cpu_time 
    ,StartTime  = er.start_time 
    ,TimeElapsed = CAST(GETDATE() - er.start_time AS TIME) 
    ,SQLStatement = st.text 
FROM sys.dm_exec_requests er 
    OUTER APPLY sys.dm_exec_sql_text(er.sql_handle) st 
    LEFT JOIN sys.dm_exec_sessions ses 
    ON ses.session_id = er.session_id 
LEFT JOIN sys.dm_exec_connections con 
    ON con.session_id = ses.session_id 
WHERE st.text IS NOT NULL 
+2

これは、実行中のジョブを示すクエリの他の検索よりもずっと役に立ちました。これは、ホストとログインを示しています。これは素晴らしいことです、ありがとう! – russds

関連する問題