sp_who (Transact-SQL)
適用於:SQL Server
提供 SQL Server 實例中目前使用者、工作階段和進程的相關信息,資料庫引擎。 您可以篩選資訊,只傳回那些未閑置、屬於特定用戶或屬於特定會話的進程。
語法
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 語句、內部 資料庫引擎 進程等等)。 在 SQL Server 2019 (15.x) 和更新版本中,數據類型為 nchar(26)。 |
request_id |
int | 在特定會話中執行的要求標識碼。 |
透過平行處理,會針對特定會話標識元建立子線程。 主線程會 spid = <xxx>
以 和 ecid = 0
表示。 其他子線程具有相同, spid = <xxx>
但使用 ecid > 0
。
備註
可能會有獨佔鎖定的封鎖程式是保存另一個進程所需的資源。
所有孤立的分散式交易都會指派的 -2
會話標識碼值。 孤立的分散式交易是未與任何會話標識符相關聯的分散式交易。 如需詳細資訊,請參閱 使用標示的交易以一致的方式復原相關資料庫。
查詢的數據is_user_process
sys.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