Freigeben über


KILL (Transact-SQL)

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) SQL Analytics-Endpunkt in Microsoft Fabric Warehouse in Microsoft Fabric

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'
[ ; ]

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 = -2verknü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_sessionsoder 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_locksAnsichten ,, sys.dm_exec_sessionsund 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 sehen Sie das Ergebnis.

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';