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实例的会话标识号。 会话 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正在重置会话。

正在运行。 会话正在运行一个或多个批。 多个活动的结果集 (MARS) 启用后,会话可以运行多个批。 有关详细信息,请参阅使用多重活动结果集 (MARS)

background。 会话正在运行一个后台任务,例如死锁检测。

回滚。 会话具有正在处理的事务回滚。

pending。 会话正在等待工作线程变为可用。

可运行。 会话的任务在等待获取时间量程时位于计划程序的可运行队列中。

spinloop。 会话的任务正在等待调节锁变为可用。

已挂起。 会话正在等待事件(如 I/O)完成。
loginame nchar(128) 与特定进程相关联的登录名。
hostname nchar(128) 每个进程的主机或计算机名。
blk char (5) 如果存在阻塞进程,则是该阻塞进程的会话 ID。 否则该列为零。

当与指定会话 ID 相关联的事务受到孤立分布式事务的阻塞时,该列将对阻塞孤立事务返回“-2”。
dbname nchar(128) 进程使用的数据库。
cmd nchar(16) 数据库引擎命令 (Transact-SQL 语句、内部数据库引擎进程等) 为进程执行。 在 2019 SQL Server,数据类型已更改为 nchar (26)
request_id int 特定会话中运行的请求的 ID。

如果是并行处理,则会为特定的会话 ID 创建子线程。 主线程则以 spid = <xxx>ecid =0 表示。 另一个子线程具有相同 spid = <xxx>,但 使用cid> 0。

备注

阻塞进程(可能含有排他锁)是控制其他进程所需要的资源的进程。

所有孤立的分布式事务的会话 ID 都被赋予值“-2”。 孤立的分布式事务是不与任何会话 ID 关联的分布式事务。 有关详细信息,请参阅 ) 使用标记事务恢复相关数据库 (完整恢复模式

查询 sys.dm_exec_sessions的is_user_process 列,以将系统进程与用户进程分开。

权限

要求服务器上的 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. 显示会话 ID 标识的特定进程

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

另请参阅

sp_lock (Transact-SQL)
sys.sysprocesses (Transact-SQL)
系统存储过程 (Transact-SQL)