Partager via


KILL (Transact-SQL)

Arrête un processus utilisateur basé sur l'ID de session (SPID dans SQL Server 2000 et versions antérieures) 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 à être exécutée, notamment en cas d'annulation d'une longue transaction.

Dans SQL Server 2000 et versions ultérieures, KILL peut être utilisé pour mettre fin à une connexion normale, ce qui met fin en interne aux transactions associées à l'ID de session spécifié. L'instruction peut également servir à mettre fin à des transactions distribuées orphelines et incertaines lorsque le Coordinateur de transactions distribuées Microsoft est utilisé.

Icône Lien de rubriqueConventions de la syntaxe Transact-SQL

Syntaxe

KILL { session ID | UOW } [ WITH STATUSONLY ] 

Arguments

  • session ID
    ID de session du processus à interrompre. 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.

    Utilisez KILL session ID pour interrompre les transactions non distribuées et distribuées normales associées à un ID de session spécifié.

  • 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 orphelines. Ces transactions ne sont associées à aucun ID de session réel mais artificiellement associées à l'ID de session = « -2 ». Cet ID de session facilite l'identification des transactions orphelines par l'interrogation de 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
    Génère un rapport de progression sur un session ID ou UOW spécifié qui est restauré en raison d'une instruction KILL préalable. KILL WITH STATUSONLY n'interrompt ni n'achève l'session ID ou l'UOW ; la commande affiche uniquement la progression actuelle de la restauration.

Notes

KILL est habituellement utilisé pour arrêter un processus qui bloque d'autres processus importants ayant des verrous ou un processus exécutant une requête qui utilise 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 risqués sont en cours d'exécution. Vous ne pouvez pas arrêter votre propre processus. Les autres processus à ne pas arrêter sont les 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, vous pouvez interroger 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 visualiser 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 renvoyé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 à deux phases » dans Utilisation des transactions marquées (mode de sauvegarde complète).

Utilisation de WITH STATUSONLY

KILL WITH STATUSONLY ne génère un rapport que si l'ID de session ou l'UOW est en cours de restauration en raison d'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), 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 était achevée au moment de l'exécution de l'instruction KILL session ID|UOW WITH STATUSONLY, ou qu'aucun ID de session ou aucune UOW n'est en cours de restauration, KILL session ID|UOW WITH STATUSONLY renvoie l'erreur suivante 

« Msg 6120, Niveau 16, État 1, Ligne 1 »

« Impossible d'obtenir le rapport d'état. L'opération de restauration liée à l'ID de processus <ID de session> n'est pas en cours. »

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, ceci n'est pas recommandé. La répétition d'une instruction KILL session ID peut mettre fin à un nouveau processus si la restauration a été achevée et si l'ID de session a été réaffecté à une nouvelle tâche avant l'exécution de la nouvelle instruction KILL. Ceci peut être évité en spécifiant WITH STATUSONLY.

Autorisations

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

Exemples

A. 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 une UOW de D5499C66-E398-45CA-BF7E-DC9C194B48CF.

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