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