[SQL Server] sp_who, sp_who2和sp_who3
Spid (系统进程ID)
status (进程状态)
loginame (用户登录名)
hostname(用户主机名)
blk (阻塞进程的SPID)
dbname (进程正在使用的数据库名)
Cmd (当前正在执行的 命令类型)
Transact-SQL 语法约定
sp_who 返回包含以下信息的结果集。
列 | 数据类型 | 说明 |
---|---|---|
spid | smallint | 会话 ID。 |
ecid | smallint | 与特定会话 ID 相关联的给定线程的执行上下文 ID。 ECID = {0, 1, 2, 3, ...n},其中 0 始终表示主或父线程,并且 {1, 2, 3, ...n} 表示子线程。 |
status | nchar(30) | 进程状态。 可能的值有: dormant. SQL Server 正在重置会话。 running。 会话正在运行一个或多个批。 多个活动的结果集 (MARS) 启用后,会话可以运行多个批。 有关详细信息,请参阅使用多个活动的结果集 (MARS)。 background。 会话正在运行一个后台任务,例如死锁检测。 rollback。 会话具有正在处理的事务回滚。 pending。 会话正在等待工作线程变为可用。 runnable。 会话的任务在等待获取时间量程时位于计划程序的可运行队列中。 spinloop。 会话的任务正在等待调节锁变为可用。 suspended。 会话正在等待事件(如 I/O)完成。 |
loginame | nchar(128) | 与特定进程相关联的登录名。 |
hostname | nchar(128) | 每个进程的主机或计算机名。 |
blk | char(5) | 如果存在阻塞进程,则是该阻塞进程的会话 ID。 否则该列为零。 当与指定会话 ID 相关联的事务受到孤立分布式事务的阻塞时,该列将对阻塞孤立事务返回“-2”。 |
dbname | nchar(128) | 进程使用的数据库。 |
cmd | nchar(16) | 为该进程执行的数据库引擎命令(Transact-SQL 语句、数据库引擎进程等等)。 |
request_id | int | 特定会话中运行的请求的 ID。 |
如果是并行处理,则会为特定的会话 ID 创建子线程。 主线程则以 spid = <xxx> 和 ecid =0 表示。 其他子线程具有相同的 spid = <xxx>,但 ecid > 0。
阻塞进程(可能含有排他锁)是控制其他进程所需要的资源的进程。
所有孤立的分布式事务的会话 ID 都被赋予值“-2”。 孤立的分布式事务是不与任何会话 ID 关联的分布式事务。 有关详细信息,请参阅使用标记的事务一致地恢复相关的数据库的事务(完全恢复模式)。
查询 sys.dm_exec_sessions 的 is_user_process 列以分隔系统进程和用户进程。
sp_who2除了显示上面sp_who的输出信息外,还显示下面的信息: (可选参数LoginName, 或active代表活动会话数)
CPUTime (进程占用的总CPU时间)
DiskIO (进程对磁盘读的总次数)
LastBatch (客户最后一次调用存储过程或者执行查询的时间)
ProgramName (用来初始化连接的应用程序名称,或者主机名)
sp_who3是某牛人自定义的存储过程,(可选参数spid),显示“非系统会话,且是活动的会话”的详细情况。
CREATEPROCEDURE sp_who3
( @SessionIDint=NULL)
AS
BEGIN
SELECT
SPID = er.session_id
,Status = ses.status
,[Login] = ses.login_name
,Host = ses.host_name
,BlkBy = er.blocking_session_id
,DBName =DB_Name(er.database_id)
,CommandType = er.command
,SQLStatement = st.text
,ObjectName =OBJECT_NAME(st.objectid)
,ElapsedMS = er.total_elapsed_time
,CPUTime = er.cpu_time
,IOReads = er.logical_reads+ er.reads
,IOWrites = er.writes
,LastWaitType = er.last_wait_type
,StartTime = er.start_time
,Protocol = con.net_transport
,ConnectionWrites = con.num_writes
,ConnectionReads = con.num_reads
,ClientAddress = con.client_net_address
,Authentication = con.auth_scheme
FROMsys.dm_exec_requests er
OUTERAPPLY sys.dm_exec_sql_text(er.sql_handle) st
LEFTJOINsys.dm_exec_sessions ses
ON ses.session_id= er.session_id
LEFTJOINsys.dm_exec_connections con
ON con.session_id= ses.session_id
WHERE er.session_id> 50
AND @SessionIDISNULLOR er.session_id= @SessionID
ORDERBY
er.blocking_session_idDESC
,er.session_id
END
go
http://blog.csdn.net/xiaoxu0123/article/details/5757640