是否有一种方法列出当前在MS SQL Server上运行的查询(无论是通过企业管理器还是SQL)和/或谁连接?

我想我有一个很长时间运行的查询正在我的一个数据库服务器上执行,我想跟踪它并停止它(或不断启动它的人)。


当前回答

建议查询sys视图。类似于

SELECT * 
FROM 
   sys.dm_exec_sessions s
   LEFT  JOIN sys.dm_exec_connections c
        ON  s.session_id = c.session_id
   LEFT JOIN sys.dm_db_task_space_usage tsu
        ON  tsu.session_id = s.session_id
   LEFT JOIN sys.dm_os_tasks t
        ON  t.session_id = tsu.session_id
        AND t.request_id = tsu.request_id
   LEFT JOIN sys.dm_exec_requests r
        ON  r.session_id = tsu.session_id
        AND r.request_id = tsu.request_id
   OUTER APPLY sys.dm_exec_sql_text(r.sql_handle) TSQL

通过这种方式,您可以获得TotalPagesAllocated,它可以帮助您计算出占用所有服务器资源的spid。很多时候,我甚至无法打开活动监视器并使用这些系统视图来查看发生了什么。

我建议你读下面这篇文章。我从这里得到了这个参考。

其他回答

下面是一个查询,它将显示任何阻塞的查询。我不完全确定它是否只会显示缓慢的查询:

SELECT p.spid
,convert(char(12), d.name) db_name
, program_name
, convert(char(12), l.name) login_name
, convert(char(12), hostname) hostname
, cmd
, p.status
, p.blocked
, login_time
, last_batch
, p.spid
FROM      master..sysprocesses p
JOIN      master..sysdatabases d ON p.dbid =  d.dbid
JOIN      master..syslogins l ON p.sid = l.sid
WHERE     p.blocked = 0
AND       EXISTS (  SELECT 1
          FROM      master..sysprocesses p2
          WHERE     p2.blocked = p.spid )

使用Sql Server Profiler(工具菜单)监视正在执行的查询,并使用Management studio中的活动监视器查看如何连接以及他们的连接是否阻塞其他连接。

SELECT 
    p.spid, p.status, p.hostname, p.loginame, p.cpu, r.start_time, t.text
FROM
    sys.dm_exec_requests as r,
    master.dbo.sysprocesses as p
    CROSS APPLY sys.dm_exec_sql_text(p.sql_handle) t
WHERE
    p.status NOT IN ('sleeping', 'background')
AND r.session_id = p.spid

And

KILL @spid

正确的脚本应该是这样的:

select 
p.spid, p.status,p.hostname,p.loginame,p.cpu,r.start_time, t.text
    from sys.dm_exec_requests as r, sys.sysprocesses p 
    cross apply sys.dm_exec_sql_text(p.sql_handle) t
    where p.status not in ('sleeping', 'background')
    and r.session_id=p.spid

产品中内置了各种管理视图。在SQL 2000中,您将使用sysprocesses。在SQL 2K5上,有更多类似sys的视图。dm_exec_connections sys。Dm_exec_sessions和sys.dm_exec_requests。

还有像sp_who这样的过程利用这些视图。在2K5管理工作室,您还可以获得活动监视器。

最后但并非最不重要的是,还有社区贡献的脚本,如Adam Machanic的Who Is Active。