KILL (Transact-SQL)

Termina un proceso de usuario basado en el ientificador de sesión (SPID en SQL Server 2000 y en versiones anteriores) 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, especialmente cuando implique revertir una transacción larga.

En SQL Server 2000 y las versiones posteriores, KILL se puede usar para terminar una conexión normal, que termina internamente las transacciones asociadas al identificador de sesión especificado. La instrucción también puede usarse para terminar las transacciones distribuidas dudosas o huérfanas cuando se use el Coordinador de transacciones distribuidas de Microsoft (MS DTC).

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

Sintaxis

KILL { session ID | UOW } [ WITH STATUSONLY ] 

Argumentos

  • session ID
    Id. 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.

    Use KILL session ID para terminar transacciones normales no distribuidas y distribuidas asociadas a un Id. de sesión especificado.

  • UOW
    Identifica el identificador de unidad de trabajo (UOW) de las transacciones distribuidas. UOW es un GUID que puede obtenerse a partir de la columna request_owner_guid de la vista de administración dinámica sys.dm_tran_locks. UOW también puede obtenerse a partir del registro de errores o 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 terminar transacciones distribuidas huérfanas. Estas transacciones no están asociadas a ningún Id. de sesión real, sino que se asocian artificialmente al Id. de sesión = '-2'. Este Id. de sesión facilita la identificación de las transacciones huérfanas al consultar la columna de Id. 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
    Genera un informe de progreso de un session ID o UOW especificado que se está revirtiendo a causa de una instrucción KILL anterior. KILL WITH STATUSONLY no termina ni revierte el session ID o UOW; el comando solo muestra el progreso actual de la reversión.

Comentarios

KILL se utiliza normalmente para terminar un proceso que está impidiendo la ejecución de otros procesos mediante bloqueos, o un proceso que está ejecutando una consulta que utiliza recursos necesarios del sistema. No se pueden terminar los procesos del sistema ni los procesos que ejecutan un procedimiento almacenado extendido.

Utilice KILL con mucho cuidado, especialmente cuando se estén ejecutando procesos críticos. Los procesos propios no se pueden eliminar. Otros procesos que no se deben eliminar son:

  • 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 Id. de sesión activos, puede consultar 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 devuelta por el procedimiento almacenado del sistema sp_who. Si se está realizando la reversión de un SPID determinado, la columna cmd del conjunto de resultados sp_who para ese SPID indicará 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", en Usar transacciones marcadas (modelo de recuperación completa).

Usar WITH STATUSONLY

KILL WITH STATUSONLY solo genera un informe de sesión si el identificador de sesión o UOW se está revirtiendo actualmente 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, de esta forma:

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

Si la reversión del Id. de sesión o UOW ha finalizado cuando se ejecuta la instrucción session ID|UOW WITH STATUSONLY, o si no se está revirtiendo ningún Id. de sesión o UOW, KILL session ID|UOW WITH STATUSONLY devolverá el siguiente error:

"Mensaje 6120, nivel 16, estado 1, línea 1"

"No se pudo obtener un informe de estado. No hay ninguna operación Deshacer en curso para el identificador de proceso <Id. de sesión>."

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, aunque no se recomienda hacerlo. Repetir una instrucción KILL session ID puede terminar un proceso nuevo si la operación de revertir había finalizado y el identificador de sesión se volvió a asignar a una nueva tarea antes de ejecutar la nueva instrucción KILL. Si se especifica WITH STATUSONLY se evita que suceda esto.

Permissions

Requiere el permiso ALTER ANY CONNECTION. ALTER ANY CONNECTION se incluye con la pertenencia a las funciones fijas de servidor sysadmin o processadmin.

Ejemplos

A. Usar KILL para terminar una sesión

En el siguiente ejemplo se muestra cómo terminar 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 identificador de sesión específico.

KILL 54;
KILL 54 WITH STATUSONLY;
GO

--This is the progress report.
spid 54: Transaction rollback in progress. Estimated rollback completion: 80% Estimated time left: 10 seconds.

C. Usar KILL para terminar una transacción distribuida huérfana

En el siguiente ejemplo se muestra cómo terminar una transacción distribuida huérfana (Id. de sesión = -2) con UOWD5499C66-E398-45CA-BF7E-DC9C194B48CF.

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