ver usuarios studio son management las herramientas ejemplos ejecutar desde cuales consultas consola conexiones conectados complejas activas abrir sql-server

usuarios - Listar las consultas que se ejecutan en SQL Server



ver conexiones activas sql server (16)

¿Hay alguna manera de enumerar las consultas que se están ejecutando actualmente en MS SQL Server (ya sea a través del Administrador corporativo o SQL) y / o quién está conectado?

Creo que tengo una consulta de ejecución muy larga que se está ejecutando en uno de mis servidores de bases de datos y me gustaría rastrearla y detenerla (o la persona que la sigue iniciando).


Como nota, el Monitor de actividad del servidor SQL para SQL Server 2008 se puede encontrar haciendo clic con el botón derecho en su servidor actual y yendo a "Monitor de actividad" en el menú contextual. Descubrí que esta era la forma más fácil de eliminar procesos si está utilizando SQL Server Management Studio.



El script correcto sería así:

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


En el Explorador de objetos, desplácese hasta: Servidor -> Administración -> Monitor de actividad. Esto le permitirá ver todas las conexiones en el servidor actual.


En realidad, ejecutar EXEC sp_who2 en Query Analyzer / Management Studio brinda más información que sp_who .

Además, puede configurar el Analizador de SQL para ver todo el tráfico de entrada y salida del servidor. Profiler también te permite restringir exactamente lo que estás buscando.

Para SQL Server 2008:

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

Tenga en cuenta que el generador de perfiles es realmente una aplicación de registro y observación. Continuará registrándose y mirando mientras se esté ejecutando. Puede llenar archivos de texto o bases de datos o discos duros, así que tenga cuidado con lo que tiene que ver y durante cuánto tiempo.


Esto le mostrará los SPID más antiguos en un servidor SQL 2000 o SQL 2005:

select P.spid , right(convert(varchar, dateadd(ms, datediff(ms, P.last_batch, getdate()), ''1900-01-01''), 121), 12) as ''batch_duration'' , P.program_name , P.hostname , P.loginame from master.dbo.sysprocesses P where P.spid > 50 and P.status not in (''background'', ''sleeping'') and P.cmd not in (''AWAITING COMMAND'' ,''MIRROR HANDLER'' ,''LAZY WRITER'' ,''CHECKPOINT SLEEP'' ,''RA MANAGER'') order by batch_duration desc

Si necesita ver el SQL ejecutándose para un spid dado a partir de los resultados, use algo como esto:

declare @spid int , @stmt_start int , @stmt_end int , @sql_handle binary(20) set @spid = XXX -- Fill this in select top 1 @sql_handle = sql_handle , @stmt_start = case stmt_start when 0 then 0 else stmt_start / 2 end , @stmt_end = case stmt_end when -1 then -1 else stmt_end / 2 end from master.dbo.sysprocesses where spid = @spid order by ecid SELECT SUBSTRING( text, COALESCE(NULLIF(@stmt_start, 0), 1), CASE @stmt_end WHEN -1 THEN DATALENGTH(text) ELSE (@stmt_end - @stmt_start) END ) FROM ::fn_get_sql(@sql_handle)



Puede ejecutar el comando sp_who para obtener una lista de todos los usuarios, sesiones y procesos actuales. Luego puede ejecutar el comando KILL en cualquier spid que esté bloqueando a otros.


Puede usar la consulta a continuación para encontrar la última solicitud en ejecución:

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

Usando la secuencia de comandos a continuación también puede encontrar la cantidad de conexiones por base de datos:

SELECT DB_NAME(DBID) AS DataBaseName ,COUNT(DBID) AS NumberOfConnections ,LogiName FROM sys.sysprocesses WHERE DBID > 0 GROUP BY DBID, LogiName

Para obtener más información, visite: http://www.dbrnd.com/2015/06/script-to-find-running-process-session-logged-user-in-sql-server/


Si está ejecutando SQL Server 2005 o 2008, puede usar el DMV para encontrar esto ...

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


Sugeriría consultar las vistas de sys . algo similar a

SELECT * FROM sys.dm_exec_sessions s LEFT JOIN sys.dm_exec_connections c ON s.session_id = c.session_id LEFT JOIN sys.dm_db_task_space_usage tsu ON tsu.session_id = s.session_id LEFT JOIN sys.dm_os_tasks t ON t.session_id = tsu.session_id AND t.request_id = tsu.request_id LEFT JOIN sys.dm_exec_requests r ON r.session_id = tsu.session_id AND r.request_id = tsu.request_id OUTER APPLY sys.dm_exec_sql_text(r.sql_handle) TSQL

De esta forma, puede obtener un TotalPagesAllocated que puede ayudarlo a descubrir el spid que está tomando todos los recursos del servidor. Hay muchas veces en las que ni siquiera puedo mostrar el monitor de actividad y usar estas vistas de sistema para ver qué está sucediendo.

Te recomendaría que leyeras el siguiente artículo. Obtuve esta referencia desde aquí .


Use Sql Server Profiler (menú de herramientas) para supervisar la ejecución de consultas y use el monitor de actividad en Management Studio para ver cómo está conectado y si su conexión está bloqueando otras conexiones.


aquí hay una consulta que mostrará las consultas que están bloqueando. No estoy del todo seguro de si solo mostrará consultas lentas:

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 )


en 2005 puede hacer clic derecho en una base de datos, ir a los informes y hay una lista completa de informes sobre transiciones y bloqueos, etc.


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


SELECT p.spid, p.status, p.hostname, p.loginame, p.cpu, r.start_time, t.text FROM sys.dm_exec_requests as r, master.dbo.sysprocesses as 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

Y

KILL @spid