sp_who (Transact-SQL)

適用対象:SQL Server

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

Transact-SQL 構文表記規則

構文

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

引数

[ @loginame = ] 'login' | session ID | 'ACTIVE' 結果セットをフィルター処理するために使用されます。

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

セッション ID は、SQL Server インスタンスに属するセッション ID 番号です。 セッション 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) プロセスの状態。 指定できる値は、

休止状態。 SQL Serverはセッションをリセットしています。

を実行しています。 セッションで 1 つ以上のバッチが実行されています。 複数のアクティブな結果セット (MARS) が有効になっている場合、セッションは複数のバッチを実行できます。 詳しくは、「複数のアクティブな結果セット (MARS)」をご覧ください。

背景。 セッションでは、デッドロック検出などのバックグラウンド タスクが実行されています。

ロールバック。 セッションでトランザクション ロールバックが実行中です。

保留中。 セッションは、ワーカー スレッドが使用可能になるのを待機しています。

runnable。 セッションのタスクは、時間量子の取得を待機している間、スケジューラの実行可能キューにあります。

spinloop。 セッションのタスクはスピンロックの空きを待機しています。

一時停止中です。 セッションは、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 では、データ型が nchar(26) に変更されました。
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.sysのプロセス (Transact-sql)
システム ストアド プロシージャ (Transact-SQL)