Compartir a través de


KILL (Transact-SQL)

Se aplica a: punto de conexión de SQL Server Azure SQL Database Azure SQL Instancia administrada punto de conexión de SQL Analytics Analytics Platform System (PDW) de SQL Analytics System (PDW) de SQL Server en Microsoft Fabric Warehouse 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 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'
[ ; ]

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

Identificador de sesión del proceso que se va a finalizar. session_ides 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_lockslas vistas de administración dinámica o , sys.dm_exec_sessionso 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_locksvistas de administración dinámica , sys.dm_exec_sessionsy 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 STATUSONLYgenera 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

El conjunto de resultados es el siguiente:

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';