sp_who使用

[SQL Server]  sp_who, sp_who2和sp_who3

sp_who可以返回如下信息: (可选参数LoginName, 或active代表活动会话数)
Spid         (系统进程ID)
status      (进程状态)
loginame  (用户登录名)
hostname(用户主机名)
blk           (阻塞进程的SPID)
dbname   (进程正在使用的数据库名)
Cmd        (当前正在执行的命令类型)

sp_who2除了显示上面sp_who的输出信息外,还显示下面的信息:  (可选参数LoginName, 或active代表活动会话数)
CPUTime           (进程占用的总CPU时间)
DiskIO              (进程对磁盘读的总次数)
LastBatch         (客户最后一次调用存储过程或者执行查询的时间)
ProgramName  (用来初始化连接的应用程序名称,或者主机名)

例子

查看spid = 120 的详细信息,并结束该进程

sp_who2  120

kill 120

此外, sp_who3是某牛人自定义的存储过程,(可选参数spid),显示“非系统会话,且是活动的会话”的详细情况。

CREATE PROCEDURE sp_who3
(  @SessionID int = 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
FROM sys.dm_exec_requests er
OUTER APPLY sys.dm_exec_sql_text(er.sql_handle) st
LEFT JOIN sys.dm_exec_sessions ses
ON ses.session_id = er.session_id
LEFT JOIN sys.dm_exec_connections con
ON con.session_id = ses.session_id
WHERE er.session_id > 50
    AND @SessionID IS NULL OR er.session_id = @SessionID
ORDER BY
    er.blocking_session_id DESC
    ,er.session_id
END
go
时间: 2024-08-16 05:50:24

sp_who使用的相关文章

SQL Server死锁排查

1. 死锁原理 根据操作系统中的定义:死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态. 死锁的四个必要条件:互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用.请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源.非剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺.循环等待条件(Circular wait):系统中若干进程组成

SQL SERVER 常用命令

红色为常用 0.row_number() over 和数据组合sale/cnt select *,row_number() over(order by productname) as rownumberfrom productsselect row_number() over(order by sale/cnt desc) as sort, sale/cntfrom (select -60 as sale,3 as cnt from dual unionselect 24 as sale,6 a

SQL Server CPU

解决数据库系统的性能问题可能是一项艰巨的任务.了解如何找到问题很重要,但是了解系统对特定请求作出特定反应的原因更加重要.影响数据库服务器上的 CPU 利用率 的因素有很多:SQL 语句的编译和重新编译.缺少索引.多线程操作.磁盘瓶颈.内存瓶颈.日常维护以及抽取.转换和装载 (ETL) 活动和其他因素.利用 CPU 本身并不是一件坏事情,执行任务是 CPU 的职责所在.CPU 利用率正常的关键是确保 CPU 处理您需要它处理的任务,而不是将循环浪费在不良优化的代码或缓慢的硬件上. 达到同一目的的两

数据提高查询速度的方法(摘抄)

处理百万级以上的数据提高查询速度的方法: 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:     select id from t where num is null     可以在num上设置默认值0,确保表中num列没有

50种方法优化SQL Server数据库查询(转载)

原文地址:http://www.cnblogs.com/zhycyq/articles/2636748.html 查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 5.网络速度慢 6.查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7.锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷) 8.sp_lock,sp_who,活动的用

查看当前数据库正在在运行的Session

当数据库运行比较缓慢时,我们需要实时查看当前有什么Session在运行,获得信息越完整,对于分析低性能的原因越有帮助.根据之前调优的经历,简单几步分析如下: 1.通过SQL Server内置的Sp_who查询 2.更深入的可以通过Sp_who2查询 3.比第2点更丰富的,可以通过下面的语句,不但可以查询出当前executing_statement,还可以获取到当前语句的执行计划 --语句如下: SELECT des.session_id , des.status , des.login_name

sql server常见配置函数及其功能

配置函数用于返回配置选项的设置信息,常见如下: [email protected]@DATEFIRST 针对会话返回SET DATEFIRST的当前值,set  datefirst表示指定的每周的第一天, 美国英语中默认1对应星期一,2对应星期二,以此类推,7对应周日,周日在西方表示每周的第一天 示例:以下设置5,周五作为每周的第一天,并假定今天是周五,即今日是以周五为第一天 set datefirst 5 go select @@DATEFIRST 第一天,datepart(DW,getdat

SQL中如何检查死锁

编写人:CC阿爸 2014-6-15 在日常SQL数据库的操作中,SQL偶尔会出现表被死锁的问题.比如: 在执行事务时,突然中止事务.系统肯定会锁表. 大批量数据操作时,由于网络 机器性能等相关因素,都会偶尔引起死锁. 这也是SQL没有oracle强大的功能之一. select 标志='死锁的进程', spid,kpid,a.blocked,dbid,uid,loginame,cpu,login_time,open_tran, status,hostname,program_name,hostp

ms sqlserver 系列之如何查看数据链接数

[转]如何查看SQL SERVER数据库当前连接数 1.通过管理工具开始->管理工具->性能(或者是运行里面输入mmc)然后通过添加计数器添加 SQL 的常用统计然后在下面列出的项目里面选择用户连接就可以时时查询到数据库的连接数了.不过此方法的话需要有访问那台计算机的权限,就是要通过 Windows账户登陆进去才可以添加此计数器. 2.通过系统表查询 SQL code SELECT * FROM[Master].[dbo].[SYSPROCESSES] WHERE [DBID] IN ( SE