sp_who (Transact-SQL)

適用於:SQL Server

提供 SQL Server 實例中目前使用者、工作階段和進程的相關信息,資料庫引擎。 您可以篩選資訊,只傳回那些未閑置、屬於特定用戶或屬於特定會話的進程。

Transact-SQL 語法慣例

語法

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

引數

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

用來篩選結果集。

  • loginsysname ,可識別屬於特定登入的進程。

  • session_id是屬於 SQL Server 實例的會話標識碼。 session_id為smallint

  • ACTIVE 排除正在等候使用者下一個命令的工作階段。

如果未提供任何值,程式會報告屬於 實例的所有會話。

傳回碼值

0 (成功)或 1 (失敗)。

結果集

sp_who 會傳回具有下列信息的結果集。

資料行 資料類型 描述
spid smallint 工作階段識別碼。
ecid smallint 與特定會話標識碼相關聯的指定線程執行內容識別碼。

ECID = { 0, 1, 2, 3, ...n },其中 0 一律代表主要或父線程,以及 { 1, 2, 3, ...n } 代表子線程。
status nchar(30) 進程狀態。 可能的值是:

- dormant. SQL Server 正在重設會話。

- running. 會話正在執行一或多個批次。 啟用多個作用中結果集 (MARS) 時,會話可以執行多個批次。 如需詳細資訊,請參閱使用 Multiple Active Result Sets (MARS)

- background. 會話正在執行背景工作,例如死結偵測。

- rollback. 會話在處理中具有交易回復。

- pending. 會話正在等候背景工作線程可供使用。

- runnable. 會話的工作位於排程器的可執行佇列中,而等候取得時間量子。

- spinloop. 會話的工作正在等候同步鎖定變成免費。

- suspended. 會話正在等候 I/O 等事件完成。
loginame nchar(128) 與特定進程相關聯的登入名稱。
hostname nchar(128) 每個進程的主機或計算機名稱。
blk char(5) 如果存在封鎖程式的工作階段識別碼,則為 。 否則,這個資料列是 0

當孤立分散式交易封鎖與指定工作階段識別碼相關聯的交易時,這個資料行會 -2 傳回封鎖孤立交易的 。
dbname nchar(128) 進程所使用的資料庫。
cmd nchar(16) 針對進程執行 資料庫引擎 命令 (Transact-SQL 語句、內部 資料庫引擎 進程等等)。 在 SQL Server 2019 (15.x) 和更新版本中,數據類型為 nchar(26)。
request_id int 在特定會話中執行的要求標識碼。

透過平行處理,會針對特定會話標識元建立子線程。 主線程會 spid = <xxx> 以 和 ecid = 0表示。 其他子線程具有相同, spid = <xxx>但使用 ecid > 0

備註

可能會有獨佔鎖定的封鎖程式是保存另一個進程所需的資源。

所有孤立的分散式交易都會指派的 -2會話標識碼值。 孤立的分散式交易是未與任何會話標識符相關聯的分散式交易。 如需詳細資訊,請參閱使用標示的交易以一致的方式復原相關資料庫 (完整復原模式)

查詢的數據is_user_processsys.dm_exec_sessions行,以分隔系統進程與用戶進程。

權限

需要伺服器上的 VIEW SERVER STATE 許可權,才能在 SQL Server 實例上查看所有執行中的會話。 否則,使用者只會看到目前的會話。

範例

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. 顯示會話標識碼所識別的特定進程

USE master;
GO
EXEC sp_who '10' --specifies the process_id;
GO