[SQL Server] sp_who, sp_who2和sp_who3
2012-08-24 10:43
423 查看
[SQL Server] sp_who, sp_who2和sp_who3
sp_who可以返回如下信息: (可选参数LoginName, 或active代表活动会话数)
Spid (系统进程ID)
status (进程状态)
loginame (用户登录名)
hostname(用户主机名)
blk (阻塞进程的SPID)
dbname (进程正在使用的数据库名)
Cmd (当前正在执行的命令类型)
Transact-SQL 语法约定
语法
参数
[ @loginame = ] 'login' |
session ID | 'ACTIVE'
用于筛选结果集。
login 的数据类型为
sysname,它用于标识属于特定登录名的进程。
session ID 是属于 SQL Server 实例的会话标识号。
session ID 的数据类型为
smallint。
ACTIVE 排除正在等待用户发出下一个命令的会话。
如果没有提供任何值,则过程报告属于实例的所有会话。
返回代码值
0(成功)或 1(失败)
结果集
sp_who 返回包含以下信息的结果集。
如果是并行处理,则会为特定的会话 ID 创建子线程。
主线程则以 spid = <xxx> 和 ecid =0 表示。
其他子线程具有相同的 spid = <xxx>,但
ecid > 0。
注释
阻塞进程(可能含有排他锁)是控制其他进程所需要的资源的进程。
所有孤立的分布式事务的会话 ID 都被赋予值“-2”。
孤立的分布式事务是不与任何会话 ID 关联的分布式事务。 有关详细信息,请参阅使用标记的事务一致地恢复相关的数据库的事务(完全恢复模式)。
查询 sys.dm_exec_sessions 的 is_user_process 列以分隔系统进程和用户进程。
权限
要求对服务器具有 VIEW SERVER STATE 权限才能查看 SQL Server 实例上所有正在执行的会话。
否则,用户只能查看当前会话。
示例
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
sp_who可以返回如下信息: (可选参数LoginName, 或active代表活动会话数)
Spid (系统进程ID)
status (进程状态)
loginame (用户登录名)
hostname(用户主机名)
blk (阻塞进程的SPID)
dbname (进程正在使用的数据库名)
Cmd (当前正在执行的命令类型)
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 | 会话 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。 |
主线程则以 spid = <xxx> 和 ecid =0 表示。
其他子线程具有相同的 spid = <xxx>,但
ecid > 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_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
相关文章推荐
- [SQL Server] sp_who, sp_who2和sp_who3
- [SQL Server] sp_who, sp_who2和sp_who3
- [SQL Server] sp_who, sp_who2和sp_who3
- [SQL Server] sp_who, sp_who2和sp_who3
- sp_who, sp_who2和sp_who3
- sp_who, sp_who2和sp_who3
- Transact-SQL参考:sp_who、sp_who2和sp_who3
- Transact-SQL参考:sp_who、sp_who2和sp_who3
- sp_who, sp_who2和sp_who3
- sp_who, sp_who2和sp_who3
- [SQL Server] sp_who, sp_who2和sp_who3
- A Better sp_who2 using DMVs (sp_who3)
- [SQL SERVER] 统计SQL用户连接情况(sp_who)
- SQLSERVER 中sp_who, sp_who2和sp_who3
- sp_who, sp_who2和sp_who3
- SQL Server ->> SQL Server 2016新特性之 -- sp_set_session_context存储过程和SESSION_CONTEXT函数
- SQL SERVER普通用户需要什么权限才能执行sp_configure命令
- sp_who 1 2 3
- SQL Server 字段类型 decimal(18,6)小数点前是几位?记一次数据库SP的BUG处理
- 【SQL Server学习笔记】存储过程、sp_executesql存储过程、try catch错误处理