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

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


当前回答

你应该尝试非常有用的sp_whoIsActive过程,可以在这里找到:http://whoisactive.com,它是免费的。

其他回答

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

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

在2005年,你可以右键点击一个数据库,进入报告,那里有一个完整的报告列表,关于转换和锁等…

如果你正在运行SQL Server 2005或2008,你可以使用DMV's找到这个…

SELECT  *
FROM    sys.dm_exec_requests  
        CROSS APPLY sys.dm_exec_sql_text(sql_handle)  

更多关于sys.dm_exec_requests的信息 更多关于sys.dm_exec_sql_text的信息

实际上,在Query Analyzer / Management Studio中运行EXEC sp_who2比sp_who提供更多的信息。

除此之外,您还可以设置SQL Profiler来监视到服务器的所有进出流量。Profiler还可以让您缩小您正在观看的内容。

SQL Server 2008:

START - All Programs - Microsoft SQL Server 2008 - Performance Tools - SQL Server Profiler

请记住,分析器实际上是一个记录和监视应用程序。只要它在运行,它就会继续记录和监视。它可能会填满文本文件、数据库或硬盘驱动器,所以要小心你让它看什么,看多长时间。

产品中内置了各种管理视图。在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。