KILL (Transact-SQL)KILL (Transact-SQL)

S’applique à :Applies to: ouiSQL ServerSQL Server (toutes les versions prises en charge) yesSQL ServerSQL Server (all supported versions) OuiAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database OuiAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance ouiAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics ouiParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data WarehouseS’applique à :Applies to: ouiSQL ServerSQL Server (toutes les versions prises en charge) yesSQL ServerSQL Server (all supported versions) OuiAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database OuiAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance ouiAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics ouiParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data Warehouse

Met fin à un processus utilisateur basé sur l'ID de session ou sur l'unité de travail (UOW).Ends a user process that is based on the session ID or unit of work (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.If the specified session ID or UOW has much work to undo, the KILL statement may take some time to complete. Le processus prend notamment plus de temps à s’exécuter lorsque le processus implique la restauration d’une transaction longue.The process takes longer to complete particularly when the process involves rolling back a long transaction.

KILL met fin à une connexion normale, ce qui arrête en interne les transactions associées à l'ID de session spécifié.KILL ends a normal connection, which internally stops the transactions that are associated with the specified session ID. Il est possible que Distributed Transaction Coordinator (MS DTC) MicrosoftMicrosoft soit en cours d’utilisation.At times, MicrosoftMicrosoft Distributed Transaction Coordinator (MS DTC) might be in use. Si MS DTC est en cours d’utilisation, vous pouvez également utiliser l’instruction pour mettre fins à des transactions distribuées orphelines et incertaines.If MS DTC is in use, you can also use the statement to end orphaned and in-doubt distributed transactions.

Icône du lien de rubrique Conventions de la syntaxe Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SyntaxeSyntax

-- 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.To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

ArgumentsArguments

ID de session session ID
ID de session du processus auquel mettre fin.Is the session ID of the process to end. session_id est un entier unique (int) affecté à chaque connexion utilisateur lors de l’établissement de la connexion.session_id is a unique integer (int) that is assigned to each user connection when the connection is made. La valeur de l'ID de session est liée à la connexion pendant la durée de la connexion.The session ID value is tied to the connection for the duration of the connection. Lorsque la connexion se termine, la valeur entière est libérée et peut être réaffectée à une nouvelle connexion.When the connection ends, the integer value is released and can be reassigned to a new connection.

La requête suivante peut vous aider à identifier quel session_id tuer :The following query can help you identify the session_id that you want to kill:

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 UOW
Identifie l'ID de l'UOW (Unit of Work) des transactions distribuées.Identifies the Unit of Work ID (UOW) of distributed transactions. 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 is a GUID that may be obtained from the request_owner_guid column of the sys.dm_tran_locks dynamic management view. UOW peut également être obtenu à partir du journal des erreurs ou par le biais du moniteur MS DTC.UOW also can be obtained from the error log or through the MS DTC monitor. Pour plus d'informations sur la surveillance des transactions distribuées, reportez-vous à la documentation de MS DTC.For more information about monitoring distributed transactions, see the MS DTC documentation.

Utilisez KILL <UOW> pour arrêter les transactions distribuées non résolues.Use KILL <UOW> to stop unresolved distributed transactions. Ces transactions ne sont associées à aucun ID de session réel, mais elles sont artificiellement associées à l'ID de session = « -2 ».These transactions aren't associated with any real session ID, but instead are associated artificially with session ID = '-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.This session ID makes it easier to identify unresolved transactions by querying the session ID column in sys.dm_tran_locks, sys.dm_exec_sessions, or sys.dm_exec_requests dynamic management views.

WITH STATUSONLY 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.Is used to generate a progress report for a specified UOW or session_id that is being rolled back because of an earlier KILL statement. KILL WITH STATUSONLY ne met pas fin l’ID de session ou à UOW et ne les restaure pas non plus.KILL WITH STATUSONLY doesn't end or roll back the UOW or session ID. La commande ne fait qu’afficher la progression actuelle de la restauration.The command only displays the current progress of the rollback.

WITH COMMIT WITH COMMIT
Est utilisé pour supprimer une transaction distribuée non résolue avec commit.Is used to kill an unresolved distributed transaction with commit. Applicable uniquement aux transactions distribuées, vous devez spécifier une valeur d’UOW pour utiliser cette option.Only applicable to distributed transactions, you must specify a UOW to use this option. Pour plus d’informations, consultez Transactions distribuées.See distributed transactions for more information.

WITH ROLLBACK WITH ROLLBACK
Est utilisé pour supprimer une transaction distribuée non résolue avec restauration.Is used to kill an unresolved distributed transaction with rollback. Applicable uniquement aux transactions distribuées, vous devez spécifier une valeur d’UOW pour utiliser cette option.Only applicable to distributed transactions, you must specify a UOW to use this option. Pour plus d’informations, consultez Transactions distribuées.See distributed transactions for more information.

NotesRemarks

KILL est couramment utilisé pour mettre fin à un processus qui bloque d’autres processus importants avec des verrous.KILL is commonly used to end a process that is blocking other important processes with locks. KILL peut également être utilisé pour arrêter un processus qui exécute une requête utilisant des ressources système nécessaires.KILL can also be used to stop a process that is executing a query that is using necessary system resources. Il n'est pas possible de mettre fin aux processus système et aux processus exécutant une procédure stockée étendue.System processes and processes running an extended stored procedure can't be ended.

Utilisez l’instruction KILL avec précaution, particulièrement lorsque des processus critiques sont en cours d’exécution.Use KILL carefully, especially when critical processes are running. Vous ne pouvez pas tuer votre propre processus.You can't kill your own process. Vous ne devez pas non plus arrêter les processus suivants :You also shouldn't kill the following processes:

  • AWAITING COMMANDAWAITING COMMAND
  • CHECKPOINT SLEEPCHECKPOINT SLEEP
  • LAZY WRITERLAZY WRITER
  • LOCK MONITORLOCK MONITOR
  • SIGNAL HANDLERSIGNAL HANDLER

Utilisez @@SPID pour afficher la valeur de l’ID de la session en cours.Use @@SPID to display the session ID value for the current session.

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.To obtain a report of active session ID values, query the session_id column of the sys.dm_tran_locks, sys.dm_exec_sessions, and sys.dm_exec_requests dynamic management views. Vous pouvez également afficher la colonne SPID renvoyée par la procédure stockée système sp_who.You can also view the SPID column that the sp_who system stored procedure returns. 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 ».If a rollback is in progress for a specific SPID, the cmd column in the sp_who result set for that SPID indicates 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.When a particular connection has a lock on a database resource and blocks the progress of another connection, the session ID of the blocking connection shows up in the blocking_session_id column of sys.dm_exec_requests or the blk column returned by sp_who.

La commande KILL permet de résoudre des transactions distribuées incertaines.The KILL command can be used to resolve in-doubt distributed transactions. 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.These transactions are unresolved distributed transactions that occur because of unplanned restarts of the database server or MS DTC coordinator. Pour plus d’informations sur les transactions incertaines, consultez la section « Validation en deux phases » 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).For more information about in-doubt transactions, see the "Two-Phase Commit" section in Use Marked Transactions to Recover Related Databases Consistently (Full Recovery Model).

Utilisation de WITH STATUSONLYUsing 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.KILL WITH STATUSONLY generates a report if the session ID or UOW rolls back because of a previous KILL session ID|UOW statement. Le rapport de progression indique la proportion d'annulation réalisée (en pourcentage) et le temps restant estimé (en secondes).The progress report states the amount of rollback completed (in percent) and the estimated length of time left (in seconds). Le rapport indique les états sous la forme suivante :The report states it in the following form:

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 :If the rollback of the session ID or UOW finishes before the KILL session ID|UOW WITH STATUSONLY statement runs, KILL session ID|UOW WITH STATUSONLY returns the following error:

"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.This error also occurs if no session ID or UOW is being rolled back

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.The same status report can be obtained by repeating the same KILL session ID|UOW statement without using the WITH STATUSONLY option. Toutefois, il n’est pas recommandé de répéter l’option de cette façon.However, we don't recommend repeating the option this way. 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.If you repeat a KILL session ID statement, the new process might stop if the rollback finishes and the session ID is reassigned to a new task before the new KILL statement runs. Empêchez le nouveau processus de s’arrêter en spécifiant WITH STATUSONLY.Prevent the new process from stopping by specifying WITH STATUSONLY.

AutorisationsPermissions

SQL ServerSQL Server : Nécessite l’autorisation ALTER ANY CONNECTION.SQL ServerSQL Server: Requires the ALTER ANY CONNECTION permission. ALTER ANY CONNECTION est incluse avec appartenance au rôle de serveur fixe sysadmin ou processadmin.ALTER ANY CONNECTION is included with membership in the sysadmin or processadmin fixed server roles.

SQL DatabaseSQL Database : Nécessite l’autorisation KILL DATABASE CONNECTION.SQL DatabaseSQL Database: Requires the KILL DATABASE CONNECTION permission. La connexion du principal au niveau du serveur a l’autorisation KILL DATABASE CONNECTION.The server-level principal login has the KILL DATABASE CONNECTION.

ExemplesExamples

R.A. Utilisation de KILL pour arrêter une sessionUsing KILL to stop a session

L'exemple suivant indique comment arrêter l'ID de session 53.The following example shows how to stop session ID 53.

KILL 53;  
GO  

B.B. Utilisation de l'instruction KILL ID de session WITH STATUSONLY pour obtenir un rapport de progressionUsing KILL session ID WITH STATUSONLY to obtain a progress report

L'exemple suivant génère un état sur le processus de restauration d'un ID de session spécifique.The following example generates a status of the rollback process for the specific session ID.

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.C. Utilisation de KILL pour arrêter une transaction distribuée orphelineUsing KILL to stop an orphaned distributed transaction

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.The following example shows how to stop an orphaned distributed transaction (session ID = -2) with a UOW of D5499C66-E398-45CA-BF7E-DC9C194B48CF.

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

Voir aussiSee Also

KILL STATS JOB (Transact-SQL) KILL STATS JOB (Transact-SQL)
KILL QUERY NOTIFICATION SUBSCRIPTION (Transact-SQL) KILL QUERY NOTIFICATION SUBSCRIPTION (Transact-SQL)
Fonctions intégrées (Transact-SQL) Built-in Functions (Transact-SQL)
SHUTDOWN (Transact-SQL) SHUTDOWN (Transact-SQL)
@@SPID (Transact-SQL) @@SPID (Transact-SQL)
sys.dm_exec_requests (Transact-SQL) sys.dm_exec_requests (Transact-SQL)
sys.dm_exec_sessions (Transact-SQL) sys.dm_exec_sessions (Transact-SQL)
sys.dm_tran_locks (Transact-SQL) sys.dm_tran_locks (Transact-SQL)
sp_lock (Transact-SQL) sp_lock (Transact-SQL)
sp_who (Transact-SQL)sp_who (Transact-SQL)