KILL (Transact-SQL)
Gilt für: SQL Server
Azure SQL-Datenbank
Azure SQL verwaltete Instanz
Azure Synapse Analytics
Platform System (PDW)
SQL Analytics Platform-Endpunkt in Microsoft Fabric Warehouse in Microsoft Fabric Warehouse
Beendet einen Benutzerprozess basierend auf der Sitzungs-ID oder Arbeitseinheit (Unit of Work, UOW). Wenn die angegebene Sitzungs-ID oder UOW viel Arbeit zum Rückgängigmachen hat, 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, die intern die Transaktionen beendet, die der angegebenen Sitzungs-ID zugeordnet sind. 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 für SQL Server, Azure SQL Database und Azure SQL Managed Instance:
KILL { session_id [ WITH STATUSONLY ] | UOW [ WITH STATUSONLY | COMMIT | ROLLBACK ] }
[ ; ]
Syntax für Azure Synapse Analytics, Analytics Platform System (PDW) und 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
session_id
Die Sitzungs-ID des zu beendenden Prozesses. session_id
ist ein eindeutiger Int , der jeder Benutzerverbindung zugewiesen ist, wenn die Verbindung hergestellt 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 Arbeitseinheit (UOW) von verteilten Transaktionen. UOW ist eine GUID, die aus der request_owner_guid
Spalte der sys.dm_tran_locks
dynamischen Verwaltungsansicht 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.
Wird verwendet KILL <UOW>
, um nicht aufgelöste verteilte Transaktionen zu beenden. Diese Transaktionen sind keiner echten Sitzungs-ID zugeordnet, sondern werden künstlich mit der Sitzungs-ID = -2
verknüpft. Diese Sitzungs-ID erleichtert die Identifizierung nicht aufgelöster Transaktionen durch Abfragen der Sitzungs-ID-Spalte in sys.dm_tran_locks
, sys.dm_exec_sessions
oder sys.dm_exec_requests
dynamischen Verwaltungsansichten.
WITH STATUSONLY
Wird verwendet, um einen Statusbericht für einen angegebenen UOW zu generieren oder session_id
aufgrund einer früheren KILL
Anweisung zurückgesetzt zu werden. KILL WITH STATUSONLY
beendet oder rollt die UOW- oder Sitzungs-ID nicht zurück. Der Befehl zeigt nur den aktuellen Fortschritt des Rollbacks an.
WITH COMMIT
Wird verwendet, um eine nicht aufgelöste verteilte Transaktion mit Commit zu töten. 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 verteilten Transaktionen.
WITH ROLLBACK
Wird verwendet, um eine nicht aufgelöste verteilte Transaktion mit Rollback zu töten. 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 verteilten Transaktionen.
Hinweise
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 erforderliche Systemressourcen verwendet. Systemprozesse und Prozesse, die eine erweiterte gespeicherte Prozedur ausführen, können nicht beendet werden.
Verwenden Sie KILL
sorgfältig, insbesondere, 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
Wird verwendet @@SPID
, um den Sitzungs-ID-Wert für die aktuelle Sitzung anzuzeigen.
Um einen Bericht mit aktiven Sitzungs-ID-Werten zu erhalten, fragen Sie die session_id
Spalte der sys.dm_tran_locks
Ansichten ,, sys.dm_exec_sessions
und sys.dm_exec_requests
dynamische Verwaltungsansichten ab. Sie können auch die SPID
Spalte anzeigen, die die sp_who
vom System gespeicherte Prozedur zurückgibt. Wenn ein Rollback für eine bestimmte SPID ausgeführt wird, gibt die cmd
Spalte im sp_who
Resultset für diese SPID an 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 verwendet werden, um zweifelsfrei verteilte Transaktionen aufzulösen. 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 zweifelsfreien Transaktionen finden Sie im Abschnitt "Zwei-Phasen-Commit" unter "Verwenden von markierten Transaktionen zum konsistenten Wiederherstellen verwandter Datenbanken".
VERWENDEN VON WITH STATUSONLY
KILL WITH STATUSONLY
generiert einen Bericht, wenn die Sitzungs-ID oder UOW aufgrund einer vorherigen KILL <session ID>
oder KILL <UOW>
Anweisung zurückgesetzt 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
Wenn das Rollback der Sitzungs-ID oder der UOW vor der Ausführung der KILL <session ID> WITH STATUSONLY
Oder-Anweisung KILL <UOW> WITH STATUSONLY
abgeschlossen ist, KILL ... WITH STATUSONLY
wird der folgende Fehler zurückgegeben:
"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 tritt auch auf, wenn keine Sitzungs-ID oder UOW zurückgesetzt wird.
Derselbe Statusbericht kann durch Wiederholen derselben KILL
Anweisung abgerufen werden, ohne die WITH STATUSONLY
Option zu verwenden. Es wird allerdings nicht empfohlen, die Option auf diese Weise zu wiederholen. Wenn Sie eine KILL <session_id>
Anweisung wiederholen, wird der neue Prozess möglicherweise beendet, wenn der Rollback abgeschlossen ist und die Sitzungs-ID einer neuen Aufgabe neu zugewiesen wird, bevor die neue KILL
Anweisung ausgeführt wird. Verhindern Sie, dass der neue Prozess beendet wird, indem Sie angeben WITH STATUSONLY
.
Berechtigungen
SQL Server: Erfordert die ALTER ANY CONNECTION
Berechtigung. ALTER ANY CONNECTION
ist in der Mitgliedschaft in den festen Serverrollen "sysadmin " oder "processadmin " enthalten.
SQL-Datenbank: Erfordert die KILL DATABASE CONNECTION
Berechtigung. Die Prinzipalanmeldung auf Serverebene verfügt über die KILL DATABASE CONNECTION
Berechtigung.
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 der KILL-Sitzungs-ID MIT STATUSONLY zum Abrufen eines Statusberichts
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
Das folgende Beispiel zeigt, wie Sie eine verwaiste verteilte Transaktion (Sitzungs-ID = -2
) mit einem UOW von D5499C66-E398-45CA-BF7E-DC9C194B48CF
.
KILL 'D5499C66-E398-45CA-BF7E-DC9C194B48CF';