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

SI APPLICA A: sìSQL Server sìDatabase SQL di Azure sìAzure Synapse Analytics (SQL DW) sìParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

Termina un processo utente in base all'ID di sessione o all'unità di lavoro (UOW, Unit Of Work).Ends a user process that is based on the session ID or unit of work (UOW). Se all'ID di sessione o al valore UOW specificato sono associate numerose azioni di rollback, l'esecuzione dell'istruzione KILL può richiedere del tempo,If the specified session ID or UOW has much work to undo, the KILL statement may take some time to complete. soprattutto quando implica il rollback di una transazione lunga.The process takes longer to complete particularly when the process involves rolling back a long transaction.

KILL termina una connessione normale, operazione che arresta internamente le transazioni associate all'ID di sessione specificato.KILL ends a normal connection, which internally stops the transactions that are associated with the specified session ID. A volte può essere in uso MicrosoftMicrosoft Distributed Transaction Coordinator (MS DTC).At times, MicrosoftMicrosoft Distributed Transaction Coordinator (MS DTC) might be in use. In tal caso, è anche possibile usare l'istruzione per terminare le transazioni distribuite orfane e in dubbio.If MS DTC is in use, you can also use the statement to end orphaned and in-doubt distributed transactions.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintassiSyntax

-- Syntax for SQL Server  
  
KILL { session ID | UOW } [ WITH STATUSONLY ]   
-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse  
  
KILL 'session_id'  
[;]   

ArgomentiArguments

session IDsession ID
ID di sessione del processo da terminare.Is the session ID of the process to end. session ID è un valore intero univoco (int) assegnato a ogni connessione utente al momento dell'attivazione.session ID is a unique integer (int) that is assigned to each user connection when the connection is made. Il valore dell'ID di sessione rimane associato alla connessione per tutta la durata della connessione.The session ID value is tied to the connection for the duration of the connection. Al termine della connessione, il valore intero viene rilasciato ed è possibile riassegnarlo a una nuova connessione.When the connection ends, the integer value is released and can be reassigned to a new connection.
La query seguente consente di identificare il session_id che si intende eliminare: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;

UOWUOW
Si applica a: (da SQL Server 2008SQL Server 2008 fino a SQL ServerSQL ServerApplies to: (SQL Server 2008SQL Server 2008 through SQL ServerSQL Server

Identifica l'ID dell'unità di lavoro delle transazioni distribuite.Identifies the Unit of Work ID (UOW) of distributed transactions. UOW è un GUID che è possibile ottenere dalla colonna request_owner_guid della vista a gestione dinamica sys.dmtran_locks.UOW is a GUID that may be obtained from the request_owner_guid column of the sys.dm_tran_locks dynamic management view. È anche possibile ottenere il valore UOW dal log degli errori o tramite il monitoraggio MS DTC.UOW also can be obtained from the error log or through the MS DTC monitor. Per ulteriori informazioni sul monitoraggio di transazioni distribuite, vedere la documentazione di MS DTC.For more information about monitoring distributed transactions, see the MS DTC documentation.

Usare KILL UOW per arrestare le transazioni distribuite orfane.Use KILL UOW to stop orphaned distributed transactions. Queste transazioni non sono associate a un ID di sessione effettivo, ma sono invece associate in modo artificiale all'ID di sessione -2.These transactions aren't associated with any real session ID, but instead are associated artificially with session ID = '-2'. Questo ID di sessione consente di semplificare l'identificazione delle transazioni orfane tramite l'esecuzione di una query sulla colonna dell'ID di sessione nelle viste a gestione dinamica sys.dm_tran_locks, sys.dm_exec_sessions o sys.dm_exec_requests.This session ID makes it easier to identify orphaned 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 STATUSONLYWITH STATUSONLY
Genera un report di stato su un valore session ID o UOW specificato di cui è in corso il rollback a causa di un'istruzione KILL precedente.Generates a progress report about a specified session ID or UOW that is being rolled back because of an earlier KILL statement. KILL WITH STATUSONLY non termina né esegue il rollback di session ID o UOW.KILL WITH STATUSONLY doesn't end or roll back the session ID or UOW. Il comando visualizza esclusivamente lo stato corrente del rollback.The command only displays the current progress of the rollback.

RemarksRemarks

L'istruzione KILL viene normalmente usata per terminare un processo che blocca altri processi importanti con blocchi.KILL is commonly used to end a process that is blocking other important processes with locks. Può essere usata anche per arrestare un processo che sta eseguendo una query che usa risorse di sistema necessarie.KILL can also be used to stop a process that is executing a query that is using necessary system resources. I processi di sistema e i processi che eseguono una stored procedure estesa non possono essere terminati.System processes and processes running an extended stored procedure can't be ended.

Eseguire l'istruzione KILL con cautela, in particolare quando sono in esecuzione processi critici.Use KILL carefully, especially when critical processes are running. Non è possibile terminare un proprio processo.You can't kill your own process. Inoltre, è consigliabile non terminare i processi seguenti:You also shouldn't kill the following processes:

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

Usare @@SPID per visualizzare il valore dell'ID di sessione della sessione corrente.Use @@SPID to display the session ID value for the current session.

Per ottenere un report dei valori di ID della sessione attiva, eseguire una query sulla colonna session_id delle viste a gestione dinamica sys.dm_tran_locks, sys.dm_exec_sessions e 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. Si può anche visualizzare la colonna SPID restituita dalla stored procedure di sistema sp_who.You can also view the SPID column that the sp_who system stored procedure returns. Se è in corso il rollback per un processo SPID specifico, nella relativa colonna cmd del set di risultati sp_who viene indicato 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.

Quando una determinata connessione mantiene attivo un blocco su una risorsa del database e blocca l'avanzamento di un'altra connessione, l'ID di sessione della connessione di blocco viene visualizzato nella colonna blocking_session_id di sys.dm_exec_requests o nella colonna blk restituita da 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.

È possibile utilizzare il comando KILL per risolvere le transazioni distribuite in dubbio.The KILL command can be used to resolve in-doubt distributed transactions. Queste sono le transazioni distribuite non risolte che si verificano in seguito a riavvii non pianificati del server di database o di MS DTC.These transactions are unresolved distributed transactions that occur because of unplanned restarts of the database server or MS DTC coordinator. Per altre informazioni sulla creazione di transazioni contrassegnate, vedere la sezione "Commit in due fasi" in Usare transazioni contrassegnate per recuperare coerentemente i database correlati (modello di recupero con registrazione completa).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).

Utilizzo di WITH STATUSONLYUsing WITH STATUSONLY

Il comando KILL WITH STATUSONLY genera un report solo se è in corso il rollback dell'ID di sessione o del valore UOW in seguito all'esecuzione di un'istruzione KILL session ID|UOW precedente.KILL WITH STATUSONLY generates a report if the session ID or UOW rolls back because of a previous KILL session ID|UOW statement. Il report di stato indica la percentuale di rollback completata e il periodo di tempo rimanente, espresso in secondi,The progress report states the amount of rollback completed (in percent) and the estimated length of time left (in seconds). nel formato seguente:The report states it in the following form:

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

Se quando si esegue l'istruzione KILL session ID|UOW WITH STATUSONLY l'operazione di rollback dell'ID di sessione o del valore UOW è già stata completata, KILL session ID|UOW WITH STATUSONLY restituisce il messaggio di errore seguente: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."

Questo errore si verifica anche se non è in corso il rollback di ID di sessione o UOWThis error also occurs if no session ID or UOW is being rolled back

È possibile ottenere lo stesso report di stato ripetendo la stessa istruzione KILL session ID|UOW senza usare l'opzione WITH STATUSONLY.The same status report can be obtained by repeating the same KILL session ID|UOW statement without using the WITH STATUSONLY option. Tuttavia, non è consigliabile ripetere l'opzione in questo modo.However, we don't recommend repeating the option this way. Se si ripete un'istruzione KILL session ID, il nuovo processo potrebbe infatti arrestarsi se dopo il completamento del rollback l'ID di sessione viene riassegnato a una nuova attività prima dell'esecuzione della nuova istruzione 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. Impedire l'arresto del nuovo processo specificando WITH STATUSONLY.Prevent the new process from stopping by specifying WITH STATUSONLY.

AutorizzazioniPermissions

SQL ServerSQL Server: È richiesta l'autorizzazione ALTER ANY CONNECTION.SQL ServerSQL Server: Requires the ALTER ANY CONNECTION permission. L'autorizzazione ALTER ANY CONNECTION viene concessa mediante l'appartenenza al ruolo server predefinito sysadmin o processadmin.ALTER ANY CONNECTION is included with membership in the sysadmin or processadmin fixed server roles.

Database SQLSQL Database: È richiesta l'autorizzazione KILL DATABASE CONNECTION.Database SQLSQL Database: Requires the KILL DATABASE CONNECTION permission. L'account di accesso a livello di server principale ha l'autorizzazione KILL DATABASE CONNECTION.The server-level principal login has the KILL DATABASE CONNECTION.

EsempiExamples

A.A. Uso di KILL per arrestare una sessioneUsing KILL to stop a session

L'esempio seguente illustra come arrestare l'ID di sessione 53.The following example shows how to stop session ID 53.

KILL 53;  
GO  

B.B. Utilizzo di KILL session ID WITH STATUSONLY per ottenere un report di statoUsing KILL session ID WITH STATUSONLY to obtain a progress report

Nell'esempio seguente viene generato un report di stato del processo di rollback per l'ID di sessione specifico.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. Uso di KILL per arrestare una transazione distribuita orfanaUsing KILL to stop an orphaned distributed transaction

L'esempio seguente illustra come arrestare una transazione distribuita orfana (ID di sessione = -2) con un valore UOW di 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';  

Vedere ancheSee Also

KILL STATS JOB (Transact-SQL) KILL STATS JOB (Transact-SQL)
KILL QUERY NOTIFICATION SUBSCRIPTION (Transact-SQL) KILL QUERY NOTIFICATION SUBSCRIPTION (Transact-SQL)
Funzioni predefinite (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)