KILL (Transact-SQL)

 

ESTE TEMA SE APLICA A: síSQL Server (a partir de 2008)síBase de datos SQL de AzuresíAlmacenamiento de datos SQL de Azure síAlmacenamiento de datos paralelos

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).

Topic link icon Convenciones de sintaxis de Transact-SQL

-- Syntax for SQL Server  
  
KILL { session ID | UOW } [ WITH STATUSONLY ]   

-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse  
  
KILL 'session_id'  
[;]   

Id. de sesión
Es el Id. de sesión del proceso que se va a terminar. Id. de sesión es un entero único (int) 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.

Utilice KILL Id. de sesión para terminar transacciones distribuidas y no distribuidas regulares que están asociadas a un identificador de sesión especificado.

UOW

Se aplica a: (SQL Server 2008 a través de SQL Server 2016.

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 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.

Utilice KILL UOW para terminar las 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 sobre un determinado Id. de sesión o UOW que se está revirtiendo debido a una instrucción KILL anterior. KILL WITH STATUSONLY no termina ni revierte el Id. de sesión o UOW; el comando solo muestra el progreso actual de la reversión.

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 debería detener son los siguientes:

  • AWAITING COMMAND

  • CHECKPOINT SLEEP

  • LAZY WRITER

  • LOCK MONITOR

  • SIGNAL HANDLER

Use @@SPID para mostrar el valor de identificador de sesión para 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 Id. 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 acerca de las transacciones dudosas, vea la sección "Confirmación en dos fases" en Usar transacciones marcadas para recuperar las bases de datos relacionadas sistemáticamente ( Modelo de recuperación ) completo.

KILL WITH STATUSONLY genera un informe solo si el Id. de sesión o UOW está revirtiendo actualmente debido a una instrucción KILL Id. de sesión|UOW instrucción. 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 ejecute la instrucción KILL Id. de sesión|UOW se ejecuta la instrucción WITH STATUSONLY, o si ningún Id. de sesión o UOW se está revirtiendo, KILL Id. de sesión|UOW WITH STATUSONLY devolverá el error siguiente:

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

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

Puede obtener el mismo informe de estado si se repite la misma instrucción KILL Id. de sesión|UOW instrucción sin la opción WITH STATUSONLY; sin embargo, no se recomienda hacerlo. Repetir una KILL Id. de sesión instrucción podría terminar un proceso nuevo si la reversión había finalizado y se vuelve a asignar el identificador de sesión a una nueva tarea antes de ejecuta la nueva instrucción KILL. Si se especifica WITH STATUSONLY se evita que suceda esto.

SQL Server: Requiere el permiso ALTER ANY CONNECTION. ALTER ANY CONNECTION se incluye con la pertenencia los roles fijos de servidor sysadmin o processadmin.

Base de datos SQL: Requiere el permiso KILL DATABASE CONNECTION. El inicio de sesión de entidad de seguridad de nivel de servidor tiene la CONEXIÓN de base de DATOS KILL.

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 ejemplo siguiente se muestra cómo terminar una transacción distribuida huérfana (Id. de sesión = -2) con un UOW de D5499C66-E398-45CA-BF7E-DC9C194B48CF.

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

D. Usar KILL para terminar una sesión

En el siguiente ejemplo se muestra cómo terminar el Id. de sesión SID535.

KILL 'SID535';  

KILL STATS JOB ( Transact-SQL )
ELIMINAR SUSCRIPCIÓN de NOTIFICACIÓN de CONSULTA ( Transact-SQL )
Funciones integradas ( Transact-SQL )
CIERRE ( 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 )

Adiciones de comunidad

AGREGAR
Mostrar: