KILL wird üblicherweise zum Beenden von Prozessen verwendet, die andere wichtige Prozesse mit Sperren blockieren, oder von Prozessen, die Abfragen ausführen, die dringend benötigte Systemressourcen belegen. Systemprozesse und Prozesse, die eine erweiterte gespeicherte Prozedur ausführen, können nicht beendet werden.
Verwenden Sie KILL sehr sorgfältig, besonders wenn kritische Prozesse ausgeführt werden. Ihren eigenen Prozess können Sie nicht beenden. Auch die folgenden Prozesse sollten Sie nicht 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 sp_who zurückgegebenen blk-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 zum Zweiphasencommit in Verwenden markierter Transaktionen (vollständiges Wiederherstellungsmodell).
Verwenden von WITH STATUSONLY
KILL WITH STATUSONLY generiert nur dann einen Bericht, wenn aufgrund einer früheren KILL session ID|UOW-Anweisung derzeit 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 zum Zeitpunkt der Ausführung der KILL session ID|UOW WITH STATUSONLY-Anweisung bereits abgeschlossen oder wird kein Rollback für die Sitzungs-ID oder UOW ausgeführt, gibt KILL session ID|UOW WITH STATUSONLY folgende Fehlermeldung zurück:
"Meldung 6120, Ebene 16, Status 1, Zeile 1"
"Der Statusbericht kann nicht abgerufen werden. Der Rollbackvorgang für die Prozess-ID <session ID> wird zurzeit nicht ausgeführt."
Der gleiche Statusbericht wird durch Wiederholen der gleichen KILL session ID|UOW-Anweisung ohne die WITH STATUSONLY-Option erstellt. Dies wird allerdings nicht empfohlen. Durch das Wiederholen einer KILL session ID-Anweisung wird möglicherweise ein neuer Prozess 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. Mit der Angabe von WITH STATUSONLY wird dies verhindert.