Compartir a través de


sp_who (Transact-SQL)

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

Se aplica a: SQL Server (SQL Server 2008 a través de la versión actual).

Icono de vínculo a temas Convenciones 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 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:

inactivo. 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 el caso de procesamiento paralelo, se crean subprocesos secundarios para el identificador 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.

A todas las transacciones distribuidas huérfanas se les asigna como identificador de sesión el valor '-2'. Las transacciones distribuidas huérfanas son transacciones distribuidas que no están asociadas con ningún identificador de sesión. Para obtener más información, vea Usar transacciones marcadas para recuperar bases de datos relacionadas sistemáticamente (modelo de recuperación completa).

Consulte la columna is_user_process de sys.dm_exec_sessions para separar los procesos del sistema de procesos 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 solo 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

Vea también

Referencia

sp_lock (Transact-SQL)

sys.sysprocesses (Transact-SQL)

Procedimientos almacenados del sistema (Transact-SQL)