sp_who (Transact-SQL)

Microsoft SQL Server データベース エンジン インスタンスの現在のユーザー、セッション、およびプロセスに関する情報を提供します。 フィルター処理により、アイドルではないプロセスや、特定のユーザーまたはセッションに属するプロセスだけを返すことができます。

トピック リンク アイコン Transact-SQL 構文表記規則

構文

sp_who [ [ @loginame = ] 'login' | session ID | 'ACTIVE' ]

引数

  • [ @loginame = ] 'login' | session ID | 'ACTIVE'
    結果セットのフィルター処理に使用します。

    login のデータ型は sysname です。特定のログインに属するプロセスを識別します。

    session ID は、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 になります。

説明

排他ロックを保持していると考えられる、ブロック中のプロセスとは、他のプロセスが必要としているリソースを保持しているプロセスです。

孤立したすべての分散トランザクションにセッション ID 値 '-2' が割り当てられます。 孤立した分散トランザクションとは、どのセッション 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

関連項目

参照

sp_lock (Transact-SQL)

sys.sysprocesses (Transact-SQL)

システム ストアド プロシージャ (Transact-SQL)