KILL (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punto de conexión de análisis SQL en Microsoft FabricAlmacenamiento en Microsoft Fabric

Termina un proceso de usuario basado en el identificador de sesión o la unidad de trabajo (UOW). Si el identificador de sesión o UOW especificado tiene que deshacer muchas operaciones, puede que la instrucción KILL tarde en completarse. El proceso tarda más tiempo en completarse especialmente cuando implique revertir una transacción larga.

KILL termina una conexión normal, que detiene internamente las transacciones asociadas al identificador de sesión especificado. A veces, podría estar en uso el Coordinador de transacciones distribuidas de Microsoft (MS DTC). Si MS DTC está en uso, también puede utilizar la instrucción para terminar transacciones distribuidas huérfanas y dudosas.

Convenciones de sintaxis de Transact-SQL

Sintaxis

-- Syntax for SQL Server  
  
KILL { session ID [ WITH STATUSONLY ] | UOW [ WITH STATUSONLY | COMMIT | ROLLBACK ] }    

-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse and Microsoft Fabric
  
KILL 'session_id'  
[;]   

Nota:

Para ver la sintaxis de Transact-SQL para SQL Server 2014 (12.x) y versiones anteriores, consulte Versiones anteriores de la documentación.

Argumentos

session ID
Es el identificador de sesión del proceso que se va a terminar. session_id es un entero único (int) asignado a cada conexión de usuario en el momento de realizarla. El valor del Id. de sesión asociado con la conexión mientras ésta dure. Cuando la conexión finaliza, el valor entero se libera y se puede volver a asignar a una nueva conexión.

La consulta siguiente puede ayudarle a identificar el valor session_id que quiere terminar:

SELECT conn.session_id, host_name, program_name,
    nt_domain, login_name, connect_time, last_request_end_time 
FROM sys.dm_exec_sessions AS sess
JOIN sys.dm_exec_connections AS conn
   ON sess.session_id = conn.session_id;

UOW
Identifica el identificador de unidad de trabajo (UOW) de las transacciones distribuidas. UOW es un GUID que puede obtenerse desde la columna request_owner_guid de la vista de administración dinámica sys.dm_tran_locks. UOW también puede obtenerse desde el registro de errores o a través del monitor MS DTC. Para obtener más información sobre cómo supervisar transacciones distribuidas, consulte la documentación de MS DTC.

Use KILL <UOW> para detener transacciones distribuidas sin resolver. Estas transacciones no están asociadas a ningún identificador de sesión real, sino que se asocian artificialmente al identificador de sesión = "-2". Este identificador de sesión facilita la identificación de transacciones sin resolver consultando la columna del identificador de sesión en las vistas de administración dinámica sys.dm_tran_locks, sys.dm_exec_sessions o sys.dm_exec_requests.

WITH STATUSONLY
Se utiliza para generar un informe de progreso para un argumento UOW o session_id especificado que se está revirtiendo a causa de una instrucción KILL anterior. KILL WITH STATUSONLY no termina la UOW o el identificador de sesión ni lo revierte. El comando solo muestra el progreso actual de la reversión.

WITH COMMIT
Se utiliza para terminar una transacción distribuida sin resolver con confirmación. Solo se aplica a las transacciones distribuidas. Debe especificar una UOW para utilizar esta opción. Vea Transacciones distribuidas para más información.

WITH ROLLBACK
Se utiliza para terminar una transacción distribuida sin resolver con reversión. Solo se aplica a las transacciones distribuidas. Debe especificar una UOW para utilizar esta opción. Vea Transacciones distribuidas para más información.

Observaciones

KILL se utiliza normalmente para terminar un proceso que está bloqueando otros procesos importantes mediante bloqueos. KILL también se puede usar para detener un proceso que está ejecutando una consulta que usa los recursos necesarios del sistema. Los procesos del sistema y los procesos que ejecutan un procedimiento almacenado extendido no se pueden terminar.

Use KILL con cuidado, especialmente cuando se estén ejecutando procesos críticos. No puede eliminar sus propios procesos. Tampoco debe eliminar los siguientes procesos:

  • AWAITING COMMAND
  • CHECKPOINT SLEEP
  • LAZY WRITER
  • LOCK MONITOR
  • SIGNAL HANDLER

Use @@SPID para mostrar el valor del Id. de sesión de la sesión actual.

Para obtener un informe de los valores de los identificadores de sesión activos, consulte la columna session_id de las vistas de administración dinámica sys.dm_tran_locks, sys.dm_exec_sessions y sys.dm_exec_requests. También puede ver la columna SPID que el procedimiento almacenado del sistema sp_who devuelve. Si se está realizando la reversión de un SPID determinado, la columna cmd del conjunto de resultados sp_who para ese SPID indica KILLED/ROLLBACK.

Cuando una conexión específica tiene un bloqueo aplicado a un recurso de base de datos y bloquea el progreso de otra conexión, el identificador de sesión de la conexión que bloquea se muestra en la columna blocking_session_id de sys.dm_exec_requests o en la columna blk devuelta por sp_who.

El comando KILL puede utilizarse para resolver transacciones distribuidas dudosas. Estas transacciones son transacciones distribuidas sin resolver que se producen a causa de reinicios no planeados del servidor de la base de datos o del coordinador de MS DTC. Para obtener más información sobre transacciones dudosas, vea la sección "Confirmación en dos fases" de Usar transacciones marcadas para recuperar bases de datos relacionadas sistemáticamente (modelo de recuperación completa).

Usar WITH STATUSONLY

KILL WITH STATUSONLY genera un informe si el identificador de sesión o UOW se revierte a causa de una instrucción KILL session ID|UOW anterior. El informe de progreso indica la cantidad de operaciones de reversión completadas, expresada en porcentaje, y la estimación de tiempo restante, expresada en segundos. El informe lo indica de la siguiente forma:

Spid|UOW <xxx>: Transaction rollback in progress. Estimated rollback completion: <yy>% Estimated time left: <zz> seconds

Si la reversión del identificador de sesión o UOW ha finalizado antes de que se ejecute la instrucción KILL session ID|UOW WITH STATUSONLY, KILL session ID|UOW WITH STATUSONLY devuelve el siguiente error:

"Msg 6120, Level 16, State 1, Line 1"  
"Status report cannot be obtained. Rollback operation for Process ID <session ID> is not in progress."

Este error también se produce si no se revierte el parámetro identificador de sesión o UOW.

Se puede obtener el mismo informe de estado si se repite la misma instrucción KILL session ID|UOW sin la opción WITH STATUSONLY. Sin embargo, no se recomienda repetir la opción de este modo. Si repite una instrucción KILL session ID, el nuevo proceso podría terminar si la reversión finaliza y el identificador de sesión se reasigna a una nueva tarea antes de que la nueva instrucción KILL se ejecute. Impida que el nuevo proceso se detenga especificando WITH STATUSONLY.

Permisos

SQL Server: Requiere el permiso ALTER ANY CONNECTION. ALTER ANY CONNECTION se incluye con la pertenencia los roles fijos de servidor sysadmin o processadmin.

SQL Database: Requiere el permiso KILL DATABASE CONNECTION. El inicio de sesión de entidad de seguridad a nivel de servidor tiene KILL DATABASE CONNECTION.

Microsoft Fabric: requiere permisos de Administración.

Azure Synapse Analytics: requiere permisos Administración.

Ejemplos

A. Uso de KILL para detener una sesión

En el siguiente ejemplo se muestra cómo detener el identificador de sesión 53.

KILL 53;  
GO  

B. Usar KILL Id. de sesión WITH STATUSONLY para obtener un informe de progreso

En el siguiente ejemplo se genera un estado del proceso de revertir para el Id. de sesión específico.

KILL 54;  
KILL 54 WITH STATUSONLY;  
GO  

El conjunto de resultados es el siguiente:

spid 54: Transaction rollback in progress. Estimated rollback completion: 80% Estimated time left: 10 seconds.  

C. Uso de KILL para detener una transacción distribuida huérfana

En el siguiente ejemplo se muestra cómo detener una transacción distribuida huérfana (identificador de sesión = -2) con un valor UOW de D5499C66-E398-45CA-BF7E-DC9C194B48CF.

KILL 'D5499C66-E398-45CA-BF7E-DC9C194B48CF';  

Consulte también

KILL STATS JOB (Transact-SQL)
KILL QUERY NOTIFICATION SUBSCRIPTION (Transact-SQL)
Funciones integradas (Transact-SQL)
SHUTDOWN (Transact-SQL)
@@SPID (Transact-SQL)
sys.dm_exec_requests (Transact-SQL)
sys.dm_exec_sessions (Transact-SQL)
sys.dm_tran_locks (Transact-SQL)
sp_lock (Transact-SQL)
sp_who (Transact-SQL)