KILL (Transact-SQL)
S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) SQL analytics endpoint in Microsoft Fabric Warehouse in 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'
[ ; ]
Arguments
session_id
ID de session du processus à terminer. session_id
est 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_sessions
ou 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_locks
sys.dm_exec_sessions
gestion 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 STATUSONLY
gé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 d’administrateur.
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.
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';