SQL Server Profilerを使って実行中のクエリを一覧表示する

2024-04-02

SQL Serverで実行中のクエリを一覧表示する方法

方法 1:SQL Server Management Studio (SSMS) を使用する

  1. 次の情報を指定して、新しいテーブルを作成します。

    • 名前: 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';
  1. 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

説明

  1. すべてのクエリを表示する
  2. 特定のセッション ID のクエリのみを表示する
  3. 特定のデータベースに対するクエリのみを表示する

サンプルコードを編集して、ニーズに合わせて変更することができます。

注意事項

  • このサンプルコードは、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


SUBSTRING関数とREPLACE関数で日付型に変換する

DATEADD 関数は、指定された日付に日数、月数、年数を加算または減算するために使用できます。この関数を使用して、日、月、年から日付を作成するには、以下の式を使用します。この式では、DATEADD 関数が2回使用されます。最初の DATEADD 関数は、month の値を '1900-01-01' に加算し、指定された月の最初の日付を取得します。2番目の DATEADD 関数は、year の値を最初の DATEADD 関数の結果に加算し、最終的な日付を取得します。...


SQL Serverのパフォーマンスとストレージを最適化する:テーブルとインデックスのサイズ管理

テーブルサイズは、以下の要素によって決まります。行数: テーブルに格納されているデータレコードの数行サイズ: 各行のデータ量。これは、列のデータ型とサイズ、および格納されているデータ量によって決まります。オーバーヘッド: テーブルの構造と管理に必要なデータ領域。これには、ページヘッダー、行オフセットポインター、およびデータページの空き領域が含まれます。...


SQL Server の DBCC CHECKIDENT コマンドで ID 値をリセットする方法

DBCC CHECKIDENT は、SQL Server でテーブルの IDENTITY 列 の値を検証および修正するためのコマンドです。このコマンドには、ID 値を 0 にリセットするオプションも含まれています。ID 列とはIDENTITY 列は、テーブルに挿入されるレコードごとに自動的に増加する一意の値を生成する特殊な列です。多くの場合、プライマリ キーとして使用されます。...


SQL ServerビューでORDER BY句を使用できないときの解決策:マテリアライズドビューを使用する

SQL Serverにおいて、ビュー、インライン関数、派生テーブル、サブクエリ、共通表式(CTE)などのオブジェクトでORDER BY句を使用しようとすると、「The ORDER BY clause is invalid in views...


ワンランク上のSQL操作!テーブルまるごと選択から、特定列除外まで自在に操る

SQL Serverでテーブルのすべての列を1列だけ除いて選択するには、いくつかの方法があります。ここでは、最も一般的で便利な2つの方法をご紹介します。方法1: SELECT * EXCEPT を使用するSELECT * EXCEPT 句は、指定した列を除いたすべての列を選択するのに役立ちます。構文は以下の通りです。...