SQL SERVER – ¿Quién anda allí?

Si alguna vez, mientras te encuentras trabajando en tu servidor te has preguntado: ¿Cómo puedo saber qué aplicaciones están conectadas y qué recursos están usando de mi servidor SQL SERVER?   te alegrará saber que SQL Server proporciona los procedimientos almacenados SP_WHO y SP_WHO2 que nos permiten monitorear los recursos en uso, los usuarios conectados y las transacciones u operaciones en ejecución.

 El uso de estos procedimientos almacenados puede ayudarnos a detectar aquellas aplicaciones que se conectan a nuestro servidor y están haciendo un mal uso de recursos o no cierran su conexión de manera correcta.

SP_WHO recibe un parámetro que puede recibir cualquiera de los siguientes valores:

  • login:  Usuario cuyas conexiones deseamos ver
  • session ID:  Id de sesión.
  • ACTIVE: Procesos activos. 

Su ejecución nos devolverá las siguientes columnas: 

  • spid: Id. de sesión
  • ecid: Id. de contexto de ejecución de un subproceso determinado, asociado con un Id. de sesión específico.
  • ECID = {0, 1, 2, 3, …n}, donde 0 siempre representa el subproceso principal o primario, y {1, 2, 3, …n} representan los subprocesos secundarios. 
  • status:  Estado del proceso. Los valores posibles son: inactivo, en ejecución, segundo plano, reversión, pendiente, ejecutable, bloqueo por bucle, suspendida.
  • loginame: Nombre de inicio de sesión asociado al proceso específico. 
  • hostname: Nombre del host o equipo de cada proceso. 
  • blk :  Id. de sesión del proceso de bloqueo, si existe. De lo contrario, esta columna tiene el valor cero.
  • dbname:  Base de datos utilizada por el proceso. 
  • cmd:   instrucción Transact-SQL, proceso de Motor de base de datos interno, etc. que se ejecuta para el proceso. 
  • request_id:  Id. de las solicitudes que se ejecutan en una sesión específica.

 Para ejemplificar su uso, la sentencia que nos muestra los procesos del usuario sa es la siguiente: 

exec master.dbo.sp_who 'sa'

Si por el contrario queremos ver un proceso específico ejecutaremos

exec master.dbo.sp_who '1'

o podemos ver los procesos activos

exec master.dbo.sp_who 'active'

 Lo que obtendríamos sería parecido a lo siguiente:

sp_who 

El segundo procedimiento almacenado SP_WHO2 nos muestra de manera adicional las columnas;

 

  • CPUTime – El total de tiempo de cepu que el proceso requirió
  • DiskIO – El tiempo de lectura/escritura de disco que usó el proceso
  • LastBatch – La fecha y hora en que se ejecutó la última sentencia

Al ejecutar sp_who para el usuario sa obtendremos lo siguiente:

exec master.dbo.sp_who2 'sa'

 sp_who2 

 

 

 

 

 

1 Trackback / Pingback

  1. SQL SERVER – ¿Quién anda allí? « DbRunas – Noticias y Recursos sobre Bases de Datos

Deja un comentario