sp_who (Transact-SQL)
Microsoft SQL Server データベース エンジン インスタンスの現在のユーザー、セッション、およびプロセスに関する情報を提供します。フィルタ処理により、アイドルではないプロセスや、特定のユーザーまたはセッションに属するプロセスだけを返すことができます。
構文
sp_who [ [ @loginame = ] 'login' | session ID | 'ACTIVE' ]
引数
[ @loginame = ] 'login' | session ID | 'ACTIVE'
結果セットのフィルタ処理に使用します。login のデータ型は sysname です。特定のログインに属するプロセスを識別します。
session ID (SQL Server 2000 以前のバージョンでは SPID) は、SQL Server インスタンスに属するセッション識別番号です。session ID のデータ型は smallint です。
ACTIVE を指定すると、ユーザーからの次のコマンドを待機しているセッションが除外されます。
値を指定しない場合は、インスタンスに属するすべてのセッションがレポートされます。
リターン コードの値
0 (成功) または 1 (失敗)
結果セット
sp_who を実行すると、次の結果セットが返されます。
列 |
データ型 |
説明 |
---|---|---|
spid |
smallint |
セッション ID。 |
ecid |
smallint |
特定のセッション ID に関連付けられている、指定されたスレッドの実行コンテキスト ID。 ECID = {0, 1, 2, 3, ...n}。0 は常にメイン スレッドまたは親スレッドを表し、{1, 2, 3, ...n} は、サブスレッドを表します。 |
status |
nchar(30) |
プロセスの状態。以下のいずれかの値をとります。 dormant。SQL Server でセッションがリセットされています。 running。セッションで 1 つ以上のバッチが実行中です。複数のアクティブな結果セット (MARS) が有効な場合、1 回のセッションで複数のバッチを実行できます。詳細については、「複数のアクティブな結果セット (MARS) の使用」を参照してください。 background。セッションで、デッドロック検出などのバックグラウンド タスクが実行中です。 rollback。セッションでトランザクション ロールバックが実行中です。 pending。セッションは、ワーカー スレッドが使用可能になるのを待機しています。 runnable。セッションのタスクはスケジューラの実行可能なキューにあり、クォンタムの取得を待機しています。 spinloop。セッションのタスクはスピンロックの空きを待機しています。 suspended。セッションは I/O などのイベントの完了を待機しています。 |
loginame |
nchar(128) |
特定のプロセスに関連付けられているログイン名。 |
hostname |
nchar(128) |
各プロセスのホストまたはコンピュータ名。 |
blk |
char(5) |
ブロック中のプロセスが存在する場合は、そのプロセスのセッション ID。存在しない場合は、この列は 0 になります。 指定したセッション ID に関連付けられているトランザクションが、孤立した分散トランザクションによってブロックされている場合、この列はブロックしている孤立したトランザクションに対して '-2' を返します。 |
dbname |
nchar(128) |
プロセスで使用されているデータベース。 |
cmd |
nchar(16) |
プロセスで実行されているデータベース エンジンのコマンド (Transact-SQL ステートメント、内部データベース エンジン プロセスなど)。 |
request_id |
int |
特定のセッションで実行されている要求の ID。 |
並列処理の場合は、特定のセッション ID に対してサブスレッドが生成されます。メイン スレッドは spid = <xxx> および ecid =0 のように示されます。その他のサブスレッドは、spid = <xxx> は同じですが、ecid > 0 になります。
説明
排他ロックを保持していると考えられる、ブロック中のプロセスとは、他のプロセスが必要としているリソースを保持しているプロセスです。
SQL Server 2000 以降では、孤立したすべての分散トランザクションにセッション ID 値 '-2' が割り当てられます。孤立した分散トランザクションとは、どのセッション ID にも関連付けられていない分散トランザクションです。詳細については、「マークされたトランザクションの使用 (完全復旧モデル)」を参照してください。
SQL Server 2000 以降では、1 ~ 50 のセッション ID 値は、内部で使用するために予約されています。51 以上のセッション ID 値は、ユーザー セッションを表します。
権限
SQL Server インスタンスで実行されているすべてのセッションを確認するには、サーバーに対する VIEW SERVER STATE 権限が必要です。権限がない場合、ユーザーは現在のセッションだけを確認できます。
例
A. 現在のすべてのプロセスを一覧表示する
次の例では、パラメータを指定せずに sp_who を使用して、現在のすべてのユーザーをレポートします。
USE master;
GO
EXEC sp_who;
GO
B. 特定のユーザーのプロセスを一覧表示する
次の例では、ログイン名を使用して、現在のユーザーに関する情報を表示します。
USE master;
GO
EXEC sp_who 'janetl';
GO
C. アクティブなすべてのプロセスを表示する
USE master;
GO
EXEC sp_who 'active';
GO
D. セッション ID を指定して特定のプロセスを表示する
USE master;
GO
EXEC sp_who '10' --specifies the process_id;
GO