sp_who (Transact-SQL)

Se aplica a: SQL Server

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

Convenciones de sintaxis de Transact-SQL

Sintaxis

sp_who [ [ @loginame = ] { 'login' | *session_id* | 'ACTIVE' } ]
[ ; ]

Argumentos

[ @loginame = ] { 'login' | session_id | 'ACTIVE' }

Se usa para filtrar el conjunto de resultados.

  • login es sysname que 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 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 (erróneo).

Conjunto de resultados

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

Columna Tipo de datos Descripción
spid smallint Id. 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 representa siempre el subproceso principal o primario, y { 1, 2, 3, ...n } representa los subprocesos.
status nchar(30) Estado del proceso. Los valores posibles son:

- dormant. SQL Server está restableciendo la sesión.

- running. 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).

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

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

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

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

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

- suspended. 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 es 0.

Cuando una transacción asociada a un identificador de sesión especificado está bloqueada por una transacción distribuida huérfana, esta columna devuelve un -2 para la transacción huérfana de bloqueo.
dbname nchar(128) Base de datos usada por el proceso.
cmd nchar(16) Motor de base de datos comando (instrucción Transact-SQL, proceso de Motor de base de datos interno, etc.) que se ejecuta para el proceso. En SQL Server 2019 (15.x) y versiones posteriores, el tipo de datos es nchar(26).
request_id int Id. de las solicitudes que se ejecutan en una sesión específica.

Con el procesamiento paralelo, se crean subprocesos 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 podría tener un bloqueo exclusivo, es uno que contiene recursos que necesita otro proceso.

A todas las transacciones distribuidas huérfanas se les asigna el valor de identificador de sesión de -2. Las transacciones distribuidas huérfanas son transacciones distribuidas que no están asociadas a ningún identificador de sesión. Para obtener más información, consulte Uso de transacciones marcadas para recuperar bases de datos relacionadas de forma coherente.

Consulte la columna de sys.dm_exec_sessions para separar los is_user_process procesos del sistema de los 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 Enumerar 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. Enumerar el 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 por un identificador de sesión

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