sp_who (Transact-SQL)

Proporciona información acerca de los usuarios, sesiones y procesos actuales en una instancia de SQL Server Database Engine (Motor de base de datos de SQL Server) de Microsoft. La información se puede filtrar para obtener sólo los procesos que están activos, que pertenecen a un usuario específico o que pertenecen a una sesión específica.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

sp_who [ [ @loginame = ] 'login' | session ID | 'ACTIVE' ]

Argumentos

  • [ @loginame = ] 'login' | session ID | 'ACTIVE'
    Se utiliza para filtrar el conjunto de resultados.

    login es de tipo sysname e identifica los procesos que pertenecen a un inicio de sesión determinado.

    session ID (SPID en SQL Server 2000 y en versiones anteriores) es un número de identificación de sesión que pertenece a la instancia de SQL Server. session ID es de tipo smallint.

    ACTIVE excluye las sesiones que están esperando el siguiente comando del usuario.

    Si no se indica ningún valor, el procedimiento muestra todas las sesiones que pertenecen a la instancia.

Valores de código de retorno

0 (correcto) o 1 (error)

Conjuntos de resultados

sp_who devuelve un conjunto de resultados con la información siguiente.

Columna

Tipo de datos

Descripción

spid

smallint

Id. de sesión.

ecid

smallint

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

nchar(30)

Estado del proceso. Los valores posibles son:

latente. SQL Server está restableciendo la sesión.

en ejecución. La sesión está ejecutando uno o varios lotes. Si Conjuntos de resultados activos múltiples (MARS) está habilitado, una sesión puede ejecutar varios lotes. Para obtener más información, vea Utilizar conjuntos de resultados activos múltiples (MARS).

segundo plano. La sesión está ejecutando una tarea en segundo plano, como una detección de interbloqueos.

reversión. La sesión está realizando una reversión de una transacción.

pendiente. La sesión está esperando que un subproceso de trabajo esté disponible.

ejecutable. La tarea de la sesión está en la cola de ejecutables de un programador mientras espera obtener un cuanto de tiempo.

bloqueo por bucle. La tarea de la sesión está esperando que se libere un bloqueo por bucle.

suspendida. La sesión está esperando a que finalice un evento, como una entrada o salida.

loginame

nchar(128)

Nombre de inicio de sesión asociado al proceso específico.

hostname

nchar(128)

Nombre del host o equipo de cada proceso.

blk

char(5)

Id. de sesión del proceso de bloqueo, si existe. De lo contrario, esta columna tiene el valor cero.

Cuando una transacción huérfana distribuida bloquea una transacción asociada con un Id. de sesión determinado, esta columna devolverá '-2' para la transacción huérfana de bloqueo.

dbname

nchar(128)

Base de datos utilizada por el proceso.

cmd

nchar(16)

Comando de Motor de base de datos (instrucción Transact-SQL, proceso de Motor de base de datos interno, etc.) que se ejecuta para el proceso.

request_id

int

Id. de las solicitudes que se ejecutan en una sesión específica.

En caso de procesamiento paralelo, se crean subprocesos para el Id. de sesión específico. El subproceso principal se indica como spid = <xxx> y ecid =0. Los otros subprocesos tienen el mismo spid = <xxx>, pero con ecid > 0.

Comentarios

Un proceso de bloqueo, que puede tener un bloqueo exclusivo, es el que contiene recursos que otro proceso necesita.

En SQL Server 2000 y en versiones posteriores, a todas las transacciones distribuidas huérfanas se les asigna como Id. de sesión el valor '-2'. Las transacciones distribuidas huérfanas son transacciones distribuidas que no están asociadas con ningún Id. de sesión. Para obtener más información, vea Usar transacciones marcadas (modelo de recuperación completa).

En SQL Server 2000 y en versiones posteriores se reservan los valores de Id. de sesión del 1 al 50 para uso interno, y los valores del 51 en adelante representan sesiones de usuario.

Permisos

Requiere el permiso VIEW SERVER STATE en el servidor para ver todas las sesiones en ejecución en la instancia de SQL Server. De lo contrario, el usuario sólo ve la sesión actual.

Ejemplos

A. Mostrar la lista de todos los procesos actuales

En el ejemplo siguiente se utiliza sp_who sin parámetros para informar de todos los usuarios actuales.

USE master;
GO
EXEC sp_who;
GO

B. Mostrar un proceso de un usuario específico

En el ejemplo siguiente se muestra cómo ver información acerca de un usuario actual a partir de su nombre de inicio de sesión.

USE master;
GO
EXEC sp_who 'janetl';
GO

C. Mostrar todos los procesos activos

USE master;
GO
EXEC sp_who 'active';
GO

D. Mostrar un proceso específico identificado mediante un Id. de sesión

USE master;
GO
EXEC sp_who '10' --specifies the process_id;
GO