次の方法で共有


sp_who (Transact-SQL)

適用対象: SQL Server

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

Transact-SQL 構文表記規則

構文

sp_who [ [ @loginame = ] { 'login' | *session_id* | 'ACTIVE' } ]
[ ; ]

引数

[ @loginame = ] { 'login' | session_id |'ACTIVE' }

結果セットをフィルター処理するために使用されます。

  • login は、特定のログインに属するプロセスを識別する sysname です。

  • session_id は、SQL Server インスタンスに属するセッション ID 番号です。 session_idsmallint です。

  • 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_sessionsis_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