Compartir a través de


KILL (Transact-SQL)

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, especialmente cuando implique revertir una transacción larga.

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 temas Convenciones de sintaxis de Transact-SQL

Sintaxis

KILL { session ID | UOW } [ WITH STATUSONLY ] 

Argumentos

  • session ID
    Es el 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 se puede obtener 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 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 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 identificador de sesión facilita la identificación de transacciones huérfanas 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
    Genera un informe de progreso de un parámetro session ID o un parámetro UOW especificados 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 identificadores 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 para recuperar bases de datos relacionadas sistemáticamente (modelo de recuperación completa).

Usar WITH STATUSONLY

KILL WITH STATUSONLY solo genera un informe si el Id. 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 identificador de sesión o UOW ha finalizado cuando se ejecute la instrucción KILL 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:

"Msg 6120, Level 16, State 1, Line 1"

"Status report cannot be obtained. Rollback operation for Process ID <session ID> is not in progress."

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 Id. 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 los roles fijos de servidor sysadmin o processadmin.

Ejemplos

A.Usar KILL para terminar una sesión

En el siguiente ejemplo se muestra cómo terminar el Id. 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

--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 UOW D5499C66-E398-45CA-BF7E-DC9C194B48CF.

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

Vea también

Referencia

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)