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 實例的會話識別碼。 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 語句、內部 Database Engine 進程等等)。 在 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

下一步