当服务器卡慢时,可通过以下代码排查
sys.dm_exec_requests
https://learn.microsoft.com/zh-cn/sql/relational-databases/system-dynamic-management-views/sys-dm-exec-requests-transact-sql?view=sql-server-ver16
sys.sysprocesses
https://learn.microsoft.com/zh-cn/sql/relational-databases/system-compatibility-views/sys-sysprocesses-transact-sql?view=sql-server-ver16
sys.dm_exec_sql_text
https://learn.microsoft.com/zh-cn/sql/relational-databases/system-dynamic-management-views/sys-dm-exec-sql-text-transact-sql?view=sql-server-ver16
/*
sys.dm_exec_requests 返回有关在 SQL Server 中正在执行的每个请求的信息
sys.sysprocesses 包含有关在 SQL Server 实例上运行的进程的信息。 这些进程可以是客户端进程或系统进程
sys.dm_exec_sql_text 返回由指定的 sql_handle标识的 SQL 批处理的文本
**/
select
[spid] = session_id
,ecid
,[database] = db_name(sp.dbid)
,[user] = nt_username
,[status] = er.status
,[wait] = wait_type
,[individual query] = substring(qt.text,er.statement_start_offset / 2, ( case when er.statement_end_offset = -1 then len(convert(nvarchar(max), qt.text))* 2 else er.statement_end_offset end - er.statement_start_offset ) / 2)
,[parent query] = qt.text
,program = program_name
,hostname
,nt_domain
,start_time
from sys.dm_exec_requests er
inner join sys.sysprocesses sp
on er.session_id = sp.spid
cross apply sys.dm_exec_sql_text(er.sql_handle) as qt
where er.session_id > 50
and session_id not in ( @@spid )
order by 1 ,2