是否有一种方法列出当前在MS SQL Server上运行的查询(无论是通过企业管理器还是SQL)和/或谁连接?
我想我有一个很长时间运行的查询正在我的一个数据库服务器上执行,我想跟踪它并停止它(或不断启动它的人)。
是否有一种方法列出当前在MS SQL Server上运行的查询(无论是通过企业管理器还是SQL)和/或谁连接?
我想我有一个很长时间运行的查询正在我的一个数据库服务器上执行,我想跟踪它并停止它(或不断启动它的人)。
当前回答
实际上,在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 Server Profiler(工具菜单)监视正在执行的查询,并使用Management studio中的活动监视器查看如何连接以及他们的连接是否阻塞其他连接。
下面是一个查询,它将显示任何阻塞的查询。我不完全确定它是否只会显示缓慢的查询:
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 )
你可以使用下面的查询来查找正在运行的最后一个请求:
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/
实际上,在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
请记住,分析器实际上是一个记录和监视应用程序。只要它在运行,它就会继续记录和监视。它可能会填满文本文件、数据库或硬盘驱动器,所以要小心你让它看什么,看多长时间。