为了账号安全,请及时绑定邮箱和手机立即绑定

列出在SQL Server上运行的查询

列出在SQL Server上运行的查询

九州编程 2020-02-04 14:26:23
有没有办法列出当前在MS SQL Server上运行的查询(通过企业管理器或SQL)和/或与谁连接的查询?我想我的一个数据库服务器上正在执行一个运行时间很长的查询,我想对其进行跟踪并停止它(或者是不断启动它的人)。
查看完整描述

3 回答

?
森栏

TA贡献1810条经验 获得超5个赞

这将向您显示在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)


查看完整回答
反对 回复 2020-02-04
  • 3 回答
  • 0 关注
  • 635 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信