sp_who2
是 SQL Server 中的一个系统存储过程,它提供了关于当前数据库中所有活动会话的详细信息,包括会话的进程ID、状态、登录名、主机名、阻塞的会话ID、使用的数据库名、命令类型、CPU时间、磁盘I/O、最后一次批处理执行的时间以及程序名称等信息
1. 查看所有当前活动的会话:
sp_who2
可以通过 BlkBy 列来判断是否存在阻塞语句[^0^]。如果某个进程的 BlkBy 列不为 NULL ,则表示该进程被其他进程所阻塞
2. 根据特定登录名(例如 'sa')筛选会话:
sp_who2 'sa';
3. 根据特定的会话ID(例如 1)筛选会话:
sp_who2 1;
阻塞查询语句
-- 阻塞查询
SELECT
(select max(hostname) from master..sysprocesses where spid=[session_id]) as hostname,
(select max(cpu) from master..sysprocesses where spid=[session_id]) as cpu,
[session_id],
--[request_id],
[start_time] AS '开始时间',
DATEDIFF ( second , [start_time], getdate() ) hs,
[status] AS '状态',
[command] AS '命令',
DB_NAME([database_id]) AS 'DB',
[blocking_session_id] AS 'bID',
[wait_time] AS '等待时间',
dest.[text] AS 'sql语句',
[wait_type] AS '等待资源类型',
[wait_resource] AS '等待的资源',
[reads] AS '物理读次数',
[writes] AS '写次数',
[logical_reads] AS '逻辑读次数',
[row_count] AS '返回结果行数'
FROM sys.[dm_exec_requests] AS der CROSS APPLY sys.dm_exec_sql_text AS dest
--where DB_NAME([database_id]) ='BOH2G_RSC_WORK_BOH'
--and dest.[text] like '%fnd_t_operation_log%'
--where [blocking_session_id]<>0
--and DB_NAME([database_id]) ='BOH2G_RSC_WORK_BOH'
order by DATEDIFF ( second , [start_time], getdate() ) desc,[wait_time] desc