SQLServer中sp_Who、sp_Who2和sp_WhoIsActive介绍和查看监视运行

使用 sp_WhoIsActive 监视活动

sp_WhoIsActive存储过程可以监视SQL Server中当前正在运行的活动。

介绍

如果服务器速度变慢时,数据库管理员需要不断检查SQL Server实例上正在运行的操作。

系统存储过程“sp_who”和“sp_who2”可以检查实例上所有正在运行的进程,但它们缺乏很多有助于性能监控和分析过程的有用信息,也显示了很多如系统进程等无用的信息。

为此,Adam Machanic(自 2004 年起成为 Microsoft MVP)开发了一个名为“sp_whoisactive”的更强大的存储过程,以填补 DBA 的实际需求与当前提供的过程(sp_who 和 sp_who2)之间的差距。

下面将会简要介绍sp_who和sp_who2存储过程,及如何使用sp_whoisactive

sp_Who和sp_Who2介绍

官方介绍,sp_who提供有关 Microsoft SQL Server 数据库引擎实例中当前用户、会话和进程的信息。可以过滤信息以仅返回那些非空闲、属于特定用户或属于特定会话的进程。

sp_who返回诸如会话进程ID (SPID-session process ID)、执行上下文ID (ECID-execution context ID)、进程状态(status)、阻塞会话ID(blk)、数据库名称(dbname)、与此进程关联的登录名(loginame)和主机名(hostname)以及命令类型(Cmd-command type)等信息。

blk为阻塞执行的会话ID

sp_Who2与sp_Who类似,但没有文档记录也没有支持,但它从当前进程返回更多信息和性能计数器,例如执行命令的程序名称(ProgramName)、磁盘IO(DiskIO-磁盘读写总次数)、CPU时间(CPUTime-占用CPU运行的总时间)、上次批处理执行时间(LastBatch-最后一次调用存储过程或者执行查询的时间)。

如截图所示,输出显示了包含不需要的所有正在运行的系统和用户进程,并且只能使用loginname和sessionid过滤结果。而实际可能需要隐藏系统进程。

并且,以上输出不包含任何有关当前运行的SQL命令的信息,如开始执行时间、执行持续时间、等待信息等。

sp_Who和sp_Who2返回活动的、某个用户或SPID的进程信息

  • 返回某个用户的进程信息

如下,返回sa用户的会话进程信息

exec sp_who 'sa';

-- exec sp_who2 'sa';
-- exec sp_who @loginame='sa';

  • 返回活动的进程信息
exec sp_who 'ACTIVE';

-- EXEC sp_who2 'active';  

  • 返回指定进程ID的信息
exec sp_who2 '1';
exec sp_who2 1;

-- exec sp_who '1';
-- exec sp_who 1;

保存sp_Who2过滤结果

如下,有个示例可以保存sp_Who2的结果到表或表变量或临时表中。用于过滤显示

DECLARE @Table TABLE(
        SPID INT,
        Status VARCHAR(MAX),
        LOGIN VARCHAR(MAX),
        HostName VARCHAR(MAX),
        BlkBy VARCHAR(MAX),
        DBName VARCHAR(MAX),
        Command VARCHAR(MAX),
        CPUTime INT,
        DiskIO INT,
        LastBatch VARCHAR(MAX),
        ProgramName VARCHAR(MAX),
        SPID_1 
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值