如何看到活动的SQL Server连接?

我正在使用SQL Server 2008 Enterprise。 我想看到任何活动的SQL Server连接,以及所有连接的相关信息,比如从哪个IP地址连接到哪个数据库。

任何现有的工具来解决这个问题?

您可以使用sp_who存储过程。

提供有关Microsoft SQL Server数据库引擎实例中当前用户,会话和进程的信息。 可以对信息进行过滤,只返回那些属于特定用户或属于特定会话的闲置进程。

 SELECT DB_NAME(dbid) as DBName, COUNT(dbid) as NumberOfConnections, loginame as LoginName FROM sys.sysprocesses WHERE dbid > 0 GROUP BY dbid, loginame ; 

另请参阅sys.sysprocesses的Microsoft文档。

来自sp_who的一部分,你也可以使用“无证”的sp_who2系统存储过程,它给你更详细的信息。 请参阅http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=100099

点击工具栏中的“活动监视器”图标

来自Thorsten评论:
在SQL Server Management Studio中,右键单击服务器,从上下文菜单中select“活动监视器” – 或者 – 使用键盘快捷键Ctrl + Alt + A

我把它扔在一起,这样你可以做一些查询的结果

 Declare @dbName varchar(150) set @dbName = '[YOURDATABASENAME]' --Total machine connections --SELECT COUNT(dbid) as TotalConnections FROM sys.sysprocesses WHERE dbid > 0 --Available connections DECLARE @SPWHO1 TABLE (DBName VARCHAR(1000) NULL, NoOfAvailableConnections VARCHAR(1000) NULL, LoginName VARCHAR(1000) NULL) INSERT INTO @SPWHO1 SELECT db_name(dbid), count(dbid), loginame FROM sys.sysprocesses WHERE dbid > 0 GROUP BY dbid, loginame SELECT * FROM @SPWHO1 WHERE DBName = @dbName --Running connections DECLARE @SPWHO2 TABLE (SPID VARCHAR(1000), [Status] VARCHAR(1000) NULL, [Login] VARCHAR(1000) NULL, HostName VARCHAR(1000) NULL, BlkBy VARCHAR(1000) NULL, DBName VARCHAR(1000) NULL, Command VARCHAR(1000) NULL, CPUTime VARCHAR(1000) NULL, DiskIO VARCHAR(1000) NULL, LastBatch VARCHAR(1000) NULL, ProgramName VARCHAR(1000) NULL, SPID2 VARCHAR(1000) NULL, Request VARCHAR(1000) NULL) INSERT INTO @SPWHO2 EXEC sp_who2 'Active' SELECT * FROM @SPWHO2 WHERE DBName = @dbName 

或者使用这个工具: sqldog.com

下面是我的脚本来find连接到数据库的所有会话,你可以检查这些会话是否正在做任何I / O,并有一个选项来杀死他们。

脚本也显示每个会话的状态在下面看看

 --============================================================================== -- see who is connected to the database -- analyse what each spid is doing, reads and writes -- if safe you can copy and paste the killcommand - last column -- marcelo miorelli -- 18-july-2017 - london (UK) -- tested on sql server 2016 --============================================================================== USE master go SELECT sdes.session_id ,sdes.login_time ,sdes.last_request_start_time ,sdes.last_request_end_time ,sdes.is_user_process ,sdes.host_name ,sdes.program_name ,sdes.login_name ,sdes.status ,sdec.num_reads ,sdec.num_writes ,sdec.last_read ,sdec.last_write ,sdes.reads ,sdes.logical_reads ,sdes.writes ,sdest.DatabaseName ,sdest.ObjName ,sdes.client_interface_name ,sdes.nt_domain ,sdes.nt_user_name ,sdec.client_net_address ,sdec.local_net_address ,sdest.Query ,KillCommand = 'Kill '+ CAST(sdes.session_id AS VARCHAR) FROM sys.dm_exec_sessions AS sdes INNER JOIN sys.dm_exec_connections AS sdec ON sdec.session_id = sdes.session_id CROSS APPLY ( SELECT DB_NAME(dbid) AS DatabaseName ,OBJECT_NAME(objectid) AS ObjName ,COALESCE(( SELECT TEXT AS [processing-instruction(definition)] FROM sys.dm_exec_sql_text(sdec.most_recent_sql_handle) FOR XML PATH('') ,TYPE ), '') AS Query FROM sys.dm_exec_sql_text(sdec.most_recent_sql_handle) ) sdest WHERE sdes.session_id <> @@SPID AND sdest.DatabaseName ='yourdatabasename' --ORDER BY sdes.last_request_start_time DESC --==============================================================================