KILL (Transact-SQL)
Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Punto de conexión de análisis SQL en Microsoft Fabric Warehouse en Microsoft Fabric Base de datos SQL de 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 especificado o UOW tiene mucho trabajo para deshacer, la KILL
instrucción puede tardar algún tiempo en completarse. El proceso tarda más tiempo en completarse especialmente cuando implique revertir una transacción larga.
KILL
finaliza 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
Sintaxis para SQL Server, Azure SQL Database y Azure SQL Managed Instance:
KILL { session_id [ WITH STATUSONLY ] | UOW [ WITH STATUSONLY | COMMIT | ROLLBACK ] }
[ ; ]
Sintaxis de Azure Synapse Analytics, Analytics Platform System (PDW) y Microsoft Fabric:
KILL 'session_id'
[ ; ]
Argumentos
session_id
Identificador de sesión del proceso que se va a finalizar. session_id
es un valor int único que se asigna a cada conexión de usuario cuando se realiza la conexión. 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 la unidad de identificador de trabajo (UOW) de las transacciones distribuidas. UOW es un GUID que se puede obtener de la columna de la sys.dm_tran_locks
request_owner_guid
vista de administración dinámica. 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 las transacciones distribuidas sin resolver. Estas transacciones no están asociadas a ningún identificador de sesión real, sino que se asocian artificialmente con el identificador de sesión = -2
. Este identificador de sesión facilita la identificación de transacciones sin resolver consultando la columna id. de sesión en sys.dm_tran_locks
las vistas de administración dinámica o , sys.dm_exec_sessions
o sys.dm_exec_requests
.
WITH STATUSONLY
Se usa para generar un informe de progreso para una UOW especificada o session_id
que se está reviertiendo debido a una instrucción anteriorKILL
. KILL WITH STATUSONLY
no finaliza ni revierte el identificador de sesión o UOW. El comando solo muestra el progreso actual de la reversión.
WITH COMMIT
Se usa para eliminar 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. Para obtener más información, consulte Transacciones distribuidas.
WITH ROLLBACK
Se usa para eliminar 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. Para obtener más información, consulte Transacciones distribuidas.
Comentarios
KILL
normalmente se usa para finalizar un proceso que bloquea otros procesos importantes con bloqueos. KILL
también se puede usar para detener un proceso que ejecuta una consulta que usa los recursos del sistema necesarios. Los procesos del sistema y los procesos que ejecutan un procedimiento almacenado extendido no se pueden terminar.
Use KILL
cuidadosamente, especialmente cuando se ejecutan 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 identificador de sesión de la sesión actual.
Para obtener un informe de valores de identificador de sesión activos, consulte la session_id
columna de las sys.dm_tran_locks
vistas de administración dinámica , sys.dm_exec_sessions
y sys.dm_exec_requests
. También puede ver la SPID
columna que devuelve el procedimiento almacenado del sp_who
sistema. Si hay una reversión en curso para un SPID específico, la cmd
columna del sp_who
conjunto de resultados de 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 KILL
comando se puede usar 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 las transacciones dudosas, vea la sección "Confirmación en dos fases" en Usar transacciones marcadas para recuperar bases de datos relacionadas de forma coherente.
Uso de WITH STATUSONLY
KILL WITH STATUSONLY
genera un informe si el identificador de sesión o UOW se revierte debido a una instrucción o KILL <UOW>
anteriorKILL <session ID>
. 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 finaliza antes de que se ejecute la KILL <session ID> WITH STATUSONLY
instrucción o KILL <UOW> WITH STATUSONLY
, KILL ... 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 ningún identificador de sesión o UOW.
El mismo informe de estado se puede obtener repitiendo la misma KILL
instrucción sin usar la WITH STATUSONLY
opción . Sin embargo, no se recomienda repetir la opción de este modo. Si repite una KILL <session_id>
instrucción, es posible que el nuevo proceso se detenga si la reversión finaliza y el identificador de sesión se reasigna a una nueva tarea antes de que se ejecute la nueva KILL
instrucción. Evite que el nuevo proceso se detenga especificando WITH STATUSONLY
.
Permisos
SQL Server: requiere el ALTER ANY CONNECTION
permiso . ALTER ANY CONNECTION
se incluye con la pertenencia a los roles fijos de servidor sysadmin o processadmin .
SQL Database: requiere el KILL DATABASE CONNECTION
permiso . El inicio de sesión de entidad de seguridad de nivel de servidor tiene el KILL DATABASE CONNECTION
permiso .
Microsoft Fabric: requiere permisos de Administración.
Azure Synapse Analytics: requiere permisos de administrador.
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 session ID 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
Este es el conjunto de resultados.
spid 54: Transaction rollback in progress. Estimated rollback completion: 80% Estimated time left: 10 seconds.
C. Usar KILL para detener una transacción distribuida huérfana
En el ejemplo siguiente se muestra cómo detener una transacción distribuida huérfana (id. de sesión = -2
) con una UOW de D5499C66-E398-45CA-BF7E-DC9C194B48CF
.
KILL 'D5499C66-E398-45CA-BF7E-DC9C194B48CF';