SQL Server Profilerを使って実行中のクエリを一覧表示する
SQL Serverで実行中のクエリを一覧表示する方法
方法 1:SQL Server Management Studio (SSMS) を使用する
-
次の情報を指定して、新しいテーブルを作成します。
- 名前: RunningQueries
USE msdb;
GO
INSERT INTO RunningQueries
(
SessionID,
LoginName,
DatabaseName,
QueryText
)
SELECT
s.session_id,
s.login_name,
d.name AS database_name,
t.text AS query_text
FROM sys.dm_exec_sessions AS s
INNER JOIN sys.dm_exec_connections AS c ON s.session_id = c.session_id
INNER JOIN sys.databases AS d ON c.database_id = d.database_id
CROSS APPLY sys.dm_exec_sql_text(s.session_id) AS t
WHERE s.status <> 'KILLED';
- RunningQueries テーブルをクエリして、実行中のクエリを一覧表示します。
SELECT
SessionID,
LoginName,
DatabaseName,
QueryText
FROM RunningQueries;
方法 2:Transact-SQL (T-SQL) を使用する
次の T-SQL クエリを実行して、実行中のクエリを一覧表示できます。
SELECT
s.session_id,
s.login_name,
d.name AS database_name,
t.text AS query_text
FROM sys.dm_exec_sessions AS s
INNER JOIN sys.dm_exec_connections AS c ON s.session_id = c.session_id
INNER JOIN sys.databases AS d ON c.database_id = d.database_id
CROSS APPLY sys.dm_exec_sql_text(s.session_id) AS t
WHERE s.status <> 'KILLED';
方法 3:動的管理ビュー (DMV) を使用する
次の DMV を使用して、実行中のクエリに関する情報を取得できます。
- sys.dm_exec_requests:実行中の要求に関する情報を提供します。
- sys.dm_exec_sql_text:セッションによって実行されている SQL テキストを取得します。
- サードパーティ製のツールを使用する
- SQL Server Profiler を使用する
注意事項
- 上記の方法で取得できる情報は、実行中のクエリの一部のみです。
- クエリの実行プランやリソース使用量などの詳細情報は、他の方法で取得する必要があります。
サンプルコード:SQL Serverで実行中のクエリを一覧表示する
USE msdb;
GO
-- 実行中のクエリを一覧表示する
SELECT
s.session_id,
s.login_name,
d.name AS database_name,
t.text AS query_text
FROM sys.dm_exec_sessions AS s
INNER JOIN sys.dm_exec_connections AS c ON s.session_id = c.session_id
INNER JOIN sys.databases AS d ON c.database_id = d.database_id
CROSS APPLY sys.dm_exec_sql_text(s.session_id) AS t
WHERE s.status <> 'KILLED';
GO
-- セッション ID 123 の実行中のクエリのみ一覧表示する
SELECT
s.session_id,
s.login_name,
d.name AS database_name,
t.text AS query_text
FROM sys.dm_exec_sessions AS s
INNER JOIN sys.dm_exec_connections AS c ON s.session_id = c.session_id
INNER JOIN sys.databases AS d ON c.database_id = d.database_id
CROSS APPLY sys.dm_exec_sql_text(s.session_id) AS t
WHERE s.status <> 'KILLED'
AND s.session_id = 123;
GO
-- 特定のデータベースに対する実行中のクエリのみ一覧表示する
SELECT
s.session_id,
s.login_name,
d.name AS database_name,
t.text AS query_text
FROM sys.dm_exec_sessions AS s
INNER JOIN sys.dm_exec_connections AS c ON s.session_id = c.session_id
INNER JOIN sys.databases AS d ON c.database_id = d.database_id
CROSS APPLY sys.dm_exec_sql_text(s.session_id) AS t
WHERE s.status <> 'KILLED'
AND d.name = 'MyDatabase';
GO
説明
- すべてのクエリを表示する
- 特定のセッション ID のクエリのみを表示する
- 特定のデータベースに対するクエリのみを表示する
サンプルコードを編集して、ニーズに合わせて変更することができます。
注意事項
- このサンプルコードは、SQL Server 2012以降で使用できます。
SQL Serverで実行中のクエリを一覧表示するその他の方法
- SQL Sentry
- ApexSQL Monitor
- Idera SQLdm
これらのツールは、実行中のクエリに関する詳細情報を提供するだけでなく、パフォーマンスの問題の分析やトラブルシューティングにも役立ちます。
SQL Server Profiler は、SQL Server インスタンスに対するアクティビティをトレースするツールです。トレースファイルから、実行中のクエリに関する情報を取得できます。
- サードパーティ製ツールの使用には、ライセンス費用がかかります。
- SQL Server Profiler は、複雑なツールであり、使いこなすには専門知識が必要です。
サードパーティ製ツールの使用方法については、ツールのドキュメントを参照してください。
-- 新しいトレースを作成する
USE [master]
GO
EXEC sp_trace_create @trace_name = 'RunningQueries', @start_time = GETDATE();
GO
-- トレースを開始する
EXEC sp_trace_start @trace_name = 'RunningQueries';
GO
-- 10秒間トレースを実行する
WAITFOR DELAY '00:00:10';
GO
-- トレースを停止する
EXEC sp_trace_stop @trace_name = 'RunningQueries';
GO
-- トレースファイルを開く
EXEC sp_trace_setstatus @trace_name = 'RunningQueries', @status = 0;
GO
-- トレースファイルからクエリ情報を取り込む
SELECT
session_id,
login_name,
database_name,
text AS query_text
FROM [RunningQueries]
WHERE event_class = 23;
GO
-- トレースファイルを削除する
EXEC sp_trace_delete @trace_name = 'RunningQueries';
GO
説明
このサンプルコードは、SQL Server Profilerを使用して実行中のクエリを一覧表示します。
SQL Serverで実行中のクエリを一覧表示するには、いくつかの方法があります。各方法にはメリットとデメリットがあり、ニーズに合わせて最適な方法を選択する必要があります。
sql-server