KILL (Transact-SQL)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Met fin à un processus utilisateur basé sur l'ID de session ou sur l'unité de travail (UOW). Si l’ID de session ou l’UOW spécifié implique l’annulation de nombreuses tâches, l’instruction KILL peut mettre du temps à s’exécuter. Le processus prend notamment plus de temps à s’exécuter lorsque le processus implique la restauration d’une transaction longue.

KILL met fin à une connexion normale, ce qui arrête en interne les transactions associées à l'ID de session spécifié. Il est possible que Distributed Transaction Coordinator (MS DTC) Microsoft soit en cours d’utilisation. Si MS DTC est en cours d’utilisation, vous pouvez également utiliser l’instruction pour mettre fins à des transactions distribuées orphelines et incertaines.

Conventions de la syntaxe Transact-SQL

Syntaxe

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

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

Notes

Pour afficher la syntaxe Transact-SQL pour SQL Server 2014 et versions antérieures, consultez Versions antérieures de la documentation.

Arguments

session ID
ID de session du processus auquel mettre fin. session_id est un entier unique (int) affecté à chaque connexion utilisateur lors de l’établissement de la connexion. La valeur de l'ID de session est liée à la connexion pendant la durée de la connexion. Lorsque la connexion se termine, la valeur entière est libérée et peut être réaffectée à une nouvelle connexion.

La requête suivante peut vous aider à identifier quel session_id tuer :

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
Identifie l'ID de l'UOW (Unit of Work) des transactions distribuées. UOW est un GUID qui peut être obtenu à partir de la colonne request_owner_guid de la vue de gestion dynamique sys.dm_tran_locks. UOW peut également être obtenu à partir du journal des erreurs ou par le biais du moniteur MS DTC. Pour plus d'informations sur la surveillance des transactions distribuées, reportez-vous à la documentation de MS DTC.

Utilisez KILL <UOW> pour arrêter les transactions distribuées non résolues. Ces transactions ne sont associées à aucun ID de session réel, mais elles sont artificiellement associées à l'ID de session = « -2 ». Cet ID de session facilite l’identification des transactions non résolues en interrogeant la colonne d’ID de session dans les vues de gestion dynamique sys.dm_tran_locks, sys.dm_exec_sessions ou sys.dm_exec_requests.

WITH STATUSONLY
Est utilisé pour générer un rapport de progression pour l’UOW ou le session_id que vous spécifiez en cours de restauration en raison d’une instruction KILL antérieure. KILL WITH STATUSONLY ne met pas fin l’ID de session ou à UOW et ne les restaure pas non plus. La commande ne fait qu’afficher la progression actuelle de la restauration.

WITH COMMIT
Est utilisé pour supprimer une transaction distribuée non résolue avec commit. Applicable uniquement aux transactions distribuées, vous devez spécifier une valeur d’UOW pour utiliser cette option. Pour plus d’informations, consultez Transactions distribuées.

WITH ROLLBACK
Est utilisé pour supprimer une transaction distribuée non résolue avec restauration. Applicable uniquement aux transactions distribuées, vous devez spécifier une valeur d’UOW pour utiliser cette option. Pour plus d’informations, consultez Transactions distribuées.

Notes

KILL est couramment utilisé pour mettre fin à un processus qui bloque d’autres processus importants avec des verrous. KILL peut également être utilisé pour arrêter un processus qui exécute une requête utilisant des ressources système nécessaires. Il n'est pas possible de mettre fin aux processus système et aux processus exécutant une procédure stockée étendue.

Utilisez l’instruction KILL avec précaution, particulièrement lorsque des processus critiques sont en cours d’exécution. Vous ne pouvez pas tuer votre propre processus. Vous ne devez pas non plus arrêter les processus suivants :

  • AWAITING COMMAND
  • CHECKPOINT SLEEP
  • LAZY WRITER
  • LOCK MONITOR
  • SIGNAL HANDLER

Utilisez @@SPID pour afficher la valeur d'ID de la session en cours d'utilisation.

Pour obtenir un rapport des valeurs d'ID de session active, interrogez la colonne session_id des vues de gestion dynamique sys.dm_tran_locks, sys.dm_exec_sessions et sys.dm_exec_requests. Vous pouvez également afficher la colonne SPID renvoyée par la procédure stockée système sp_who. Si une restauration est en cours pour un SPID spécifique, la colonne cmd associée à celui-ci dans le jeu de résultats sp_who indique « KILLED/ROLLBACK ».

Lorsqu'une connexion particulière possède un verrou sur une ressource de base de données et qu'elle bloque le déroulement d'une autre connexion, l'ID de session de la connexion bloquante apparaît dans la colonne blocking_session_id de sys.dm_exec_requests ou dans la colonne blk retournée par sp_who.

La commande KILL permet de résoudre des transactions distribuées incertaines. Ce sont des transactions distribuées non résolues dues à des démarrages non planifiés du serveur de base de données ou du coordinateur MS DTC. Pour plus d’informations sur les transactions incertaines, consultez la section « Validation en deux temps » dans Utiliser les transactions marquées pour récupérer des bases de données associées uniformément (mode de récupération complète).

Utilisation de WITH STATUSONLY

KILL WITH STATUSONLY génère un rapport si l’ID de session ou l’UOW est restauré suite à une instruction KILL session ID|UOW antérieure. Le rapport de progression indique la proportion d'annulation réalisée (en pourcentage) et le temps restant estimé (en secondes). Le rapport indique les états sous la forme suivante :

Spid|UOW <xxx>: Transaction rollback in progress. Estimated rollback completion: <yy>% Estimated time left: <zz> seconds

Si la restauration de l’ID de session ou de l’UOW est terminée avant l’exécution de l’instruction KILL session ID|UOW WITH STATUSONLY, KILL session ID|UOW WITH STATUSONLY renvoie l’erreur suivante :

"Msg 6120, Level 16, State 1, Line 1"  
"Status report cannot be obtained. Rollback operation for Process ID <session ID> is not in progress."

Cette erreur se produit également si aucun ID de session ni aucun UOW ne sont en cours de restauration.

Le même rapport d’état peut être obtenu en répétant la même instruction KILL session ID|UOW sans utiliser l’option WITH STATUSONLY. Toutefois, il n’est pas recommandé de répéter l’option de cette façon. Si vous répétez une instruction KILL session ID, il est possible que le nouveau processus s’arrête si la restauration est achevée et que l’ID de session a été réaffecté à une nouvelle tâche avant l’exécution de la nouvelle instruction KILL. Empêchez le nouveau processus de s’arrêter en spécifiant WITH STATUSONLY.

Autorisations

SQL Server : Nécessite l’autorisation ALTER ANY CONNECTION. ALTER ANY CONNECTION est incluse avec appartenance au rôle de serveur fixe sysadmin ou processadmin.

SQL Database : Nécessite l’autorisation KILL DATABASE CONNECTION. La connexion du principal au niveau du serveur a l’autorisation KILL DATABASE CONNECTION.

Exemples

R. Utilisation de KILL pour arrêter une session

L'exemple suivant indique comment arrêter l'ID de session 53.

KILL 53;  
GO  

B. Utilisation de l'instruction KILL ID de session WITH STATUSONLY pour obtenir un rapport de progression

L'exemple suivant génère un état sur le processus de restauration d'un ID de session spécifique.

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. Utilisation de KILL pour arrêter une transaction distribuée orpheline

L’exemple suivant indique comment arrêter une transaction distribuée orpheline (ID de session = -2) avec un UOW de valeur D5499C66-E398-45CA-BF7E-DC9C194B48CF.

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

Voir aussi

KILL STATS JOB (Transact-SQL)
KILL QUERY NOTIFICATION SUBSCRIPTION (Transact-SQL)
Fonctions intégrées (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)