usuarios - ¿Cómo veo las conexiones activas de SQL Server?
ver transacciones activas sql server (6)
Estoy usando SQL Server 2008 Enterprise. Quiero ver las conexiones activas de SQL Server y la información relacionada de todas las conexiones, como desde qué dirección IP, conectarse a qué base de datos o algo.
¿Existen herramientas existentes para resolver este problema?
A continuación, se encuentra mi secuencia de comandos para encontrar todas las sesiones conectadas a una base de datos y puede verificar si esas sesiones están realizando alguna E / S y existe una opción para eliminarlas.
El script muestra también el estado de cada sesión.
Echa un vistazo a continuación.
--==============================================================================
-- 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
--==============================================================================
Además de sp_who
, también puede utilizar el procedimiento almacenado del sistema sp_who2
"no documentado" que le brinda información más detallada. Ver Diferencia entre sp_who y sp_who2 .
Haga clic en el icono "monitor de actividad" en la barra de herramientas ...
De los comentarios de Thorsten:
En SQL Server Management Studio, haga clic con el botón derecho en Servidor, seleccione "Monitor de actividad" en el menú contextual o use el método abreviado de teclado Ctrl + Alt + A.
Tiré esto juntos para que pudieran hacer algunas consultas sobre los resultados
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
Puede utilizar el procedimiento almacenado sp_who
.
Proporciona información sobre los usuarios actuales, las sesiones y los procesos en una instancia del motor de base de datos de Microsoft SQL Server. La información se puede filtrar para devolver solo aquellos procesos que no están inactivos, que pertenecen a un usuario específico o que pertenecen a una sesión específica.
SELECT
DB_NAME(dbid) as DBName,
COUNT(dbid) as NumberOfConnections,
loginame as LoginName
FROM
sys.sysprocesses
WHERE
dbid > 0
GROUP BY
dbid, loginame
;
Consulte también la documentación de Microsoft para sys.sysprocesses .