有没有办法列出当前在MS SQL Server上运行的查询(通过企业管理器或SQL)和/或连接的用户?
我想我有一个很长时间运行的查询正在我的一个数据库服务器上执行,我想跟踪它并阻止它(或不断启动它的人)。
发布于 2009-06-05 13:24:29
这将显示SQL 2000或SQL 2005服务器上运行时间最长的SPID:
select
P.spid
, right(convert(varchar,
dateadd(ms, datediff(ms, P.last_batch, getdate()), '1900-01-01'),
121), 12) as 'batch_duration'
, P.program_name
, P.hostname
, P.loginame
from master.dbo.sysprocesses P
where P.spid > 50
and P.status not in ('background', 'sleeping')
and P.cmd not in ('AWAITING COMMAND'
,'MIRROR HANDLER'
,'LAZY WRITER'
,'CHECKPOINT SLEEP'
,'RA MANAGER')
order by batch_duration desc
如果您需要从结果中查看针对给定spid运行的SQL,请使用类似以下内容:
declare
@spid int
, @stmt_start int
, @stmt_end int
, @sql_handle binary(20)
set @spid = XXX -- Fill this in
select top 1
@sql_handle = sql_handle
, @stmt_start = case stmt_start when 0 then 0 else stmt_start / 2 end
, @stmt_end = case stmt_end when -1 then -1 else stmt_end / 2 end
from sys.sysprocesses
where spid = @spid
order by ecid
SELECT
SUBSTRING( text,
COALESCE(NULLIF(@stmt_start, 0), 1),
CASE @stmt_end
WHEN -1
THEN DATALENGTH(text)
ELSE
(@stmt_end - @stmt_start)
END
)
FROM ::fn_get_sql(@sql_handle)
发布于 2009-06-02 20:37:49
发布于 2009-06-02 20:43:43
产品中内置了各种管理视图。在SQL2000上,您将使用sysprocesses。在SQL2K5上,有更多像sys.dm_exec_connections、sys.dm_exec_sessions和sys.dm_exec_requests这样的视图。
也有像sp_who这样的过程可以利用这些视图。在2K5 Management Studio中,您还可以获得活动监视器。
最后但并非最不重要的是,还有像Who Is Active by Adam Machanic这样的社区贡献的脚本。
https://stackoverflow.com/questions/941763
复制相似问题