KILL (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics-Endpunkt in Microsoft FabricWarehouse in Microsoft Fabric

Beendet einen Benutzerprozess basierend auf der Sitzungs-ID oder Arbeitseinheit (Unit of Work, UOW). Falls für die angegebene Sitzungs-ID oder UOW viele Vorgänge rückgängig gemacht werden müssen, kann die KILL-Anweisung einige Zeit in Anspruch nehmen. Es ist besonders mehr Zeit erforderlich, wenn dabei ein Rollback für eine lange Transaktion ausgeführt wird.

KILL beendet eine normale Verbindung, wodurch die der angegebenen Sitzungs-ID zugeordneten Transaktionen intern angehalten werden. Es kann Microsoft MS DTC (Microsoft Distributed Transaction Coordinator) verwendet werden. Wenn MS DTC im Einsatz ist, können Sie die Anweisung auch verwenden, um verwaiste und unsichere verteilte Transaktionen zu beenden.

Transact-SQL-Syntaxkonventionen

Syntax

-- Syntax for SQL Server  
  
KILL { session ID [ WITH STATUSONLY ] | UOW [ WITH STATUSONLY | COMMIT | ROLLBACK ] }    

-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse and Microsoft Fabric
  
KILL 'session_id'  
[;]   

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 (12.x) und früher finden Sie unter Dokumentation zu früheren Versionen.

Argumente

Sitzungs-ID
Die Sitzungs-ID des Prozesses, der beendet werden soll. Die session_id ist eine eindeutige ganze Zahl (int), die jeder Benutzerverbindung beim Herstellen der Verbindung zugewiesen wird. Der Sitzungs-ID-Wert ist für die Dauer der Verbindung an die Verbindung gebunden. Beim Beenden der Verbindung wird der ganzzahlige Wert freigegeben und kann einer neuen Verbindung zugewiesen werden.

Bei der Suche nach der session_id, die Sie beenden möchten, kann folgende Abfrage hilfreich sein:

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
Identifiziert die Arbeitseinheits-ID (UOW) verteilter Transaktionen. UOW ist eine GUID, die aus der Spalte „request_owner_guid“ der dynamischen Verwaltungssicht sys.dm_tran_locks abgerufen werden kann. UOW kann auch aus dem Fehlerprotokoll oder über den MS DTC-Monitor ermittelt werden. Weitere Informationen zum Überwachen von verteilten Transaktionen finden Sie in der MS DTC-Dokumentation.

Verwenden Sie KILL <UOW> zum Beenden nicht aufgelöster verteilter Transaktionen. Diese Transaktionen sind keiner echten Sitzungs-ID, sondern künstlich der Sitzungs-ID = '-2' zugeordnet. Diese Sitzungs-ID erleichtert es, nicht aufgelöste Transaktionen durch das Abfragen der Sitzungs-ID-Spalte in den dynamischen Verwaltungssichten sys.dm_tran_locks, sys.dm_exec_sessions oder sys.dm_exec_requests zu identifizieren.

WITH STATUSONLY
Generiert einen Fortschrittsbericht für eine angegebene UOW oder session_id, für die aufgrund einer früheren KILL-Anweisung ein Rollback ausgeführt wird. „KILL WITH STATUSONLY“ beendet weder UOW noch Sitzungs-ID und führt für diese kein Rollback aus. Der Befehl zeigt nur den aktuellen Fortschritt des Rollbacks an.

WITH COMMIT
Wird verwendet, um eine nicht aufgelöste verteilte Transaktion mit Commit zu beenden. Dies gilt nur für verteilte Transaktionen. Sie müssen eine UOW angeben, um diese Option verwenden zu können. Weitere Informationen finden Sie unter Verteilte Transaktionen.

WITH ROLLBACK
Wird verwendet, um eine nicht aufgelöste verteilte Transaktion mit Rollback zu beenden. Dies gilt nur für verteilte Transaktionen. Sie müssen eine UOW angeben, um diese Option verwenden zu können. Weitere Informationen finden Sie unter Verteilte Transaktionen.

Bemerkungen

KILL wird häufig verwendet, um einen Prozess zu beenden, der andere wichtige Prozesse mit Sperren blockiert. KILL kann auch verwendet werden, um einen Prozess zu beenden, der eine Abfrage ausführt, die die notwendigen Systemressourcen benötigt. Systemprozesse und Prozesse, die eine erweiterte gespeicherte Prozedur ausführen, können nicht beendet werden.

Verwenden Sie KILL sorgfältig, besonders wenn kritische Prozesse ausgeführt werden. Ihren eigenen Prozess können Sie nicht beenden. Sie sollten auch nicht die folgenden Prozesse beenden:

  • AWAITING COMMAND
  • CHECKPOINT SLEEP
  • LAZY WRITER
  • LOCK MONITOR
  • SIGNAL HANDLER

Mit @@SPID kann der Sitzungs-ID-Wert der aktuellen Sitzung angezeigt werden.

Sie können die session_id-Spalte der dynamischen Verwaltungssichten sys.dm_tran_locks, sys.dm_exec_sessions und sys.dm_exec_requests abfragen, um einen Bericht über die aktiven Sitzungs-ID-Werte zu erhalten. Sie können auch die SPID-Spalte anzeigen, die von der gespeicherten Systemprozedur sp_who zurückgegeben wird. Wenn für einen bestimmten SPID-Wert ein Rollback ausgeführt wird, enthält die cmd-Spalte im sp_who-Resultset für diesen SPID-Wert den Eintrag KILLED/ROLLBACK.

Wenn eine bestimmte Verbindung eine Datenbankressource sperrt und den Fortschritt einer anderen Transaktion blockiert, wird die Sitzungs-ID der blockierenden Verbindung in der blocking_session_id-Spalte von sys.dm_exec_requests oder der von blk zurückgegebenen sp_who-Spalte angezeigt.

Der KILL-Befehl kann zum Auflösen von unsicheren verteilten Transaktionen verwendet werden. Bei diesen Transaktionen handelt es sich um nicht aufgelöste verteilte Transaktionen, die aufgrund unplanmäßiger Neustarts des Datenbankservers oder von MS DTC (Microsoft Distributed Transaction Coordinator) auftreten. Weitere Informationen zu unsicheren Transaktionen finden Sie im Abschnitt „Zweiphasencommit“ unter Wiederherstellen von verwandten Datenbanken mithilfe von markierten Transaktionen (vollständiges Wiederherstellungsmodell).

Verwenden von WITH STATUSONLY

KILL WITH STATUSONLY generiert einen Bericht, wenn aufgrund einer früheren Anweisung KILL session ID|UOW ein Rollback für die Sitzungs-ID oder UOW ausgeführt wird. Der Fortschrittsbericht enthält den Prozentsatz, zu dem der Rollbackvorgang abgeschlossen ist, und die geschätzte Dauer der verbleibenden Zeit (in Sekunden) in folgender Form:

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

Ist das Rollback der Sitzungs-ID oder UOW vor der Ausführung der Anweisung KILL session ID|UOW WITH STATUSONLY abgeschlossen, gibt KILL session ID|UOW WITH STATUSONLY folgende Fehlermeldung zurück:

"Msg 6120, Level 16, State 1, Line 1"  
"Status report cannot be obtained. Rollback operation for Process ID <session ID> is not in progress."

Dieser Fehler wird nur ausgegeben, wenn kein Rollback für die Sitzungs-ID oder UOW ausgeführt wird.

Der gleiche Statusbericht wird durch Wiederholen der gleichen Anweisung KILL session ID|UOW ohne die WITH STATUSONLY-Option erstellt. Es wird allerdings nicht empfohlen, die Option auf diese Weise zu wiederholen. Durch das Wiederholen einer KILL session ID-Anweisung wird der neue Prozess möglicherweise beendet, falls das Rollback bereits abgeschlossen war und die Sitzungs-ID vor der Ausführung der neuen KILL-Anweisung einem neuen Task zugewiesen worden ist. Durch die Angabe von WITH STATUSONLY kann verhindert werden, dass der neue Prozess beendet wird.

Berechtigungen

SQL Server: Erfordert die ALTER ANY CONNECTION-Berechtigung. ALTER ANY CONNECTION ist mit der Mitgliedschaft in den festen Serverrollen sysadmin und processadmin verbunden.

SQL-Datenbank: Erfordert die Berechtigung KILL DATABASE CONNECTION. Das Prinzipalkonto auf Serverebene verfügt über die Berechtigung KILL DATABASE CONNECTION.

Microsoft Fabric: Erfordert Administratorberechtigungen.

Azure Synapse Analytics: Erfordert Administratorberechtigungen.

Beispiele

A. Verwenden von KILL zum Beenden einer Sitzung

Im folgenden Beispiel wird gezeigt, wie die Sitzungs-ID 53 beendet wird.

KILL 53;  
GO  

B. Verwenden von KILL Sitzungs-ID WITH STATUSONLY zum Anzeigen eines Fortschrittsberichts

Im folgenden Beispiel wird ein Statusbericht für den Rollbackvorgang der angegebenen Sitzungs-ID generiert.

KILL 54;  
KILL 54 WITH STATUSONLY;  
GO  

Hier ist das Resultset.

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

C. Verwenden von KILL zum Beenden einer verwaisten verteilten Transaktion

Im folgenden Beispiel wird gezeigt, wie eine verwaiste verteilte Transaktion (session ID = -2) mit einem UOW von D5499C66-E398-45CA-BF7E-DC9C194B48CF beendet wird.

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

Weitere Informationen

KILL STATS JOB (Transact-SQL)
KILL QUERY NOTIFICATION SUBSCRIPTION (Transact-SQL)
Integrierte Funktionen (Transact-SQL)
SHUTDOWN (Transact-SQL)
@@SPID (Transact-SQL)
sys.dm_exec_requests (Transact-SQL)
sys.dm_exec_sessions (Transact-SQL)
sys.dm_tran_locks (Transact-SQL)
sp_lock (Transact-SQL)
sp_who (Transact-SQL)