6

SP_WHO y cómo filtrarlo

¡Nuestro proyecto no podía empezar de otra manera! Como primera entrada en nuestro blog, hemos decidido hablar sobre uno de los comandos o procedimientos más importantes y utilizados del SQL Server: sp_who.


¿Qué es sp_who y para que se utiliza?

Si nos basamos a la documentación oficial sp_who es un procedimiento almacenado del sistema que está documentado y soportado por Microsoft.

Este procedimiento almacenado nos devuelve información sobre usuarios, sesiones y procesos en una instancia del motor de base de datos de SQL Server que están corriendo en el momento de su ejecución. Se suele utilizar habitualmente cuando se desea conocer la carga de trabajo en la instancia o ver si alguno de los procesos está bloqueado.


¿Cómo se ejecuta?

Se ejecuta de la siguiente manera:

ó

Si quieres filtrar por usuario:

O por estado:


¿Cuál es la diferencia entre SP_WHO y SP_WHO2?

Todo aquel que haya trabajado con sp_who ha escuchado hablar de su hermano sp_who2. Su principal diferencia es que sp_who2 ya no se encuentra soportado ni documentado por Microsoft, y que también nos devuelve más información que nos puede ser muy útil.

Podemos destacar como valores añadidos por sp_who2  algunas columnas como CPUTime, DiskIO y ProgramName, valores muy importantes para nuestras labores como DBAs.

Como observamos, sp_who nos devuelve la siguiente información tras la consulta de varias tablas del sistema (syslocks, sysprocesses, etc.):

  • SPID La ID del proceso del sistema.
  • STATUS el estado del proceso (RUNNABLE, SLEEPING, SUSPENDED, etc.).
  • LOGIN Nombre de usuario del usuario.
  • HOSTNAME Nombre de la máquina del usuario.
  • BLK Si el proceso se bloquea, este valor es el SPID del proceso de bloqueo.
  • DBNAME Nombre de la base de datos que está utilizando el proceso.
  • CMD El comando que se está ejecutando actualmente (por ejemplo, SELECT, INSERT)

Por parte de sp_who2 proporciona la información anterior, pero también proporciona la siguiente información adicional:

  • CPUTime Tiempo total de CPU que tomó el proceso.
  • DiskIO Cantidad total de lecturas de disco para el proceso.
  • LastBatch La última vez que un cliente llamó a un procedimiento o ejecutó una consulta.
  • ProgramName Aplicación que ha iniciado la conexión (por ejemplo, Visual Basic, MS SQL Query Analyzer)


El truco

Algo que realizamos habitualmente es almacenar y manipular los datos que nos proporciona sp_who según nuestras necesidades. Para ello almacenamos temporalmente los resultados de este comando en una tabla temporal de la siguiente manera:

Con esto concluimos nuestra primera entrada de nuestro blog. Si crees que nos hemos dejado algo en el tintero no dudes en escrbirnos.

Hasta la próxima.

6 comentarios

  1. Buen trabajo Toño… la people en mi curro lo usa.
    Felicidades tío!!
    Pa’lante… como debe ché!!
    Salu2

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *