sp_who (Transact-SQL)
適用対象: SQL Server
SQL Server データベース エンジンのインスタンス内の現在のユーザー、セッション、およびプロセスに関する情報を提供します。 情報をフィルター処理して、アイドル状態ではないプロセス、特定のユーザーに属しているプロセス、または特定のセッションに属しているプロセスのみを返すことができます。
構文
sp_who [ [ @loginame = ] { 'login' | *session_id* | 'ACTIVE' } ]
[ ; ]
引数
[ @loginame = ] { 'login' | session_id |'ACTIVE' }
結果セットをフィルター処理するために使用されます。
login は、特定のログインに属するプロセスを識別する sysname です。
session_id は、SQL Server インスタンスに属するセッション ID 番号です。 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) が有効になっている場合、セッションは複数のバッチを実行できます。 詳しくは、「複数のアクティブな結果セット (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 ステートメント、内部データベース エンジン プロセスなど)。 SQL Server 2019 (15.x) 以降のバージョンでは、データ型は nchar(26)です。 |
request_id |
int | 特定のセッションで実行されている要求の ID。 |
並列処理では、特定のセッション ID に対してサブスレッドが作成されます。 メイン スレッドは spid = <xxx>
および ecid = 0
のように示されます。 他のサブスレッドの spid = <xxx>
は同じですが、 ecid > 0
。
解説
排他ロックを持つ可能性があるブロッキング プロセスは、別のプロセスに必要なリソースを保持しているプロセスです。
孤立したすべての分散トランザクションには、 -2
のセッション ID 値が割り当てられます。 孤立した分散トランザクションは、セッション ID に関連付けられていない分散トランザクションです。 詳細については、「 マークされたトランザクションを使用して関連データベースを一貫して復旧するを参照してください。
sys.dm_exec_sessions
のis_user_process
列に対してクエリを実行して、システム プロセスをユーザー プロセスから分離します。
アクセス許可
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