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).
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 QUERY NOTIFICATION SUBSCRIPTION (Transact-SQL)
Funciones integradas (Transact-SQL)
sys.dm_exec_requests (Transact-SQL)
sys.dm_exec_sessions (Transact-SQL)