KILL (Transact-SQL)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Point de terminaison analytique SQL dans Microsoft FabricEntrepôt dans Microsoft Fabric

Met fin à un processus utilisateur basé sur l'ID de session ou sur l'unité de travail (UOW). Si l’ID de session spécifié ou UOW a beaucoup de travail à annuler, l’instruction KILL peut prendre un certain temps. Le processus prend notamment plus de temps à s’exécuter lorsque le processus implique la restauration d’une transaction longue.

KILL termine une connexion normale, 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

Syntaxe pour SQL Server, Azure SQL Database et Azure SQL Managed Instance :

KILL { session_id [ WITH STATUSONLY ] | UOW [ WITH STATUSONLY | COMMIT | ROLLBACK ] }
[ ; ]

Syntaxe suivante pour Azure Synapse Analytics, Analytics Platform System (PDW) et Microsoft Fabric :

KILL 'session_id'
[ ; ]

Remarque

Pour afficher la syntaxe Transact-SQL pour SQL Server 2014 (12.x) et versions antérieures, consultez la Documentation sur les versions antérieures.

Arguments

session_id

ID de session du processus à terminer. session_idest un int unique affecté à chaque connexion utilisateur lorsque la connexion est établie. 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’unité d’ID de travail (UOW) des transactions distribuées. UOW est un GUID qui peut être obtenu à partir de la request_owner_guid colonne de la sys.dm_tran_locks vue de gestion dynamique. 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.

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

WITH STATUSONLY

Utilisé pour générer un rapport de progression pour un UOW spécifié ou session_id qui est restauré en raison d’une instruction antérieureKILL. KILL WITH STATUSONLY ne termine pas ou ne restaure pas l’ID de session ou UOW. La commande ne fait qu’afficher la progression actuelle de la restauration.

WITH COMMIT

Utilisé pour tuer une transaction distribuée non résolue avec validation. 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

Utilisé pour tuer 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 qui utilise les 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 KILL attentivement, en particulier 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

Permet @@SPID d’afficher la valeur d’ID de session pour la session active.

Pour obtenir un rapport de valeurs d’ID de session active, interrogez la session_id colonne des vues de sys.dm_tran_lockssys.dm_exec_sessionsgestion dynamique et sys.dm_exec_requests dynamique. Vous pouvez également afficher la SPID colonne retournée par la sp_who procédure stockée système. Si une restauration est en cours pour un SPID spécifique, la cmd colonne du sp_who jeu de résultats pour ce SPID 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 KILL commande peut être utilisée pour résoudre les transactions distribuées sans doute. 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 en doute, consultez la section « Validation en deux phases » dans Utiliser les transactions marquées pour récupérer les bases de données associées de manière cohérente.

Utiliser WITH STATUSONLY

KILL WITH STATUSONLYgénère un rapport si l’ID de session ou UOW est rétabli en raison d’une instruction ou KILL <UOW> d’une précédenteKILL <session ID>. 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 UOW se termine avant l’exécution de l’instruction ou KILL <UOW> WITH STATUSONLY de l’instructionKILL <session ID> WITH STATUSONLY, KILL ... WITH STATUSONLY retourne 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 ou UOW n’est restauré.

Le même rapport d’état peut être obtenu en répétant la même KILL instruction 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 KILL <session_id> instruction, le nouveau processus peut s’arrêter si la restauration se termine et que l’ID de session est réaffecté à une nouvelle tâche avant l’exécution de la nouvelle KILL instruction. Empêcher l’arrêt du nouveau processus en spécifiant WITH STATUSONLY.

Autorisations

SQL Server : nécessite l’autorisation ALTER ANY CONNECTION . ALTER ANY CONNECTION est inclus avec l’appartenance aux rôles serveur fixe sysadmin ou processadmin .

SQL Database : nécessite l’autorisation KILL DATABASE CONNECTION . La connexion du principal au niveau du serveur dispose de l’autorisation KILL DATABASE CONNECTION .

Microsoft Fabric : Nécessite des autorisations Administration.

Azure Synapse Analytics : nécessite des autorisations Administration.

Exemples

R. Utiliser KILL pour arrêter une session

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

KILL 53;
GO

B. Utiliser KILL SESSION ID 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

Voici le jeu de résultats obtenu.

spid 54: Transaction rollback in progress. Estimated rollback completion: 80% Estimated time left: 10 seconds.

C. Utiliser KILL pour arrêter une transaction distribuée orpheline

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

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