是否有一种方法列出当前在MS SQL Server上运行的查询(无论是通过企业管理器还是SQL)和/或谁连接?
我想我有一个很长时间运行的查询正在我的一个数据库服务器上执行,我想跟踪它并停止它(或不断启动它的人)。
是否有一种方法列出当前在MS SQL Server上运行的查询(无论是通过企业管理器还是SQL)和/或谁连接?
我想我有一个很长时间运行的查询正在我的一个数据库服务器上执行,我想跟踪它并停止它(或不断启动它的人)。
当前回答
注意,SQL Server 2008的SQL Server活动监控器可以通过右键单击当前服务器并在上下文菜单中转到“活动监控器”来找到。我发现如果使用SQL Server Management Studio,这是杀死进程最简单的方法。
其他回答
您可以运行sp_who命令来获取当前所有用户、会话和进程的列表。然后你可以对任何阻挡其他蜘蛛运行KILL命令。
你可以使用下面的查询来查找正在运行的最后一个请求:
SELECT
der.session_id
,est.TEXT AS QueryText
,der.status
,der.blocking_session_id
,der.cpu_time
,der.total_elapsed_time
FROM sys.dm_exec_requests AS der
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS est
使用下面的脚本,你还可以找到每个数据库的连接数:
SELECT
DB_NAME(DBID) AS DataBaseName
,COUNT(DBID) AS NumberOfConnections
,LogiName
FROM sys.sysprocesses
WHERE DBID > 0
GROUP BY DBID, LogiName
详情请浏览: http://www.dbrnd.com/2015/06/script-to-find-running-process-session-logged-user-in-sql-server/
SELECT
p.spid, p.status, p.hostname, p.loginame, p.cpu, r.start_time, r.command,
p.program_name, text
FROM
sys.dm_exec_requests AS r,
master.dbo.sysprocesses AS p
CROSS APPLY sys.dm_exec_sql_text(p.sql_handle)
WHERE
p.status NOT IN ('sleeping', 'background')
AND r.session_id = p.spid
使用Sql Server Profiler(工具菜单)监视正在执行的查询,并使用Management studio中的活动监视器查看如何连接以及他们的连接是否阻塞其他连接。
产品中内置了各种管理视图。在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。