Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Punkt końcowy analizy SQL w usłudze Microsoft Fabric
Magazyn w usłudze Microsoft Fabric
Baza danych SQL w usłudze Microsoft Fabric (wersja zapoznawcza)
Kończy proces użytkownika oparty na identyfikatorze sesji lub jednostce pracy (UOW). Jeśli określony identyfikator sesji lub funkcja UOW ma dużo pracy do cofnięcia, KILL
instrukcja może zająć trochę czasu. Proces trwa dłużej, szczególnie gdy proces obejmuje wycofywanie długiej transakcji.
KILL
kończy normalne połączenie, które wewnętrznie zatrzymuje transakcje skojarzone z określonym identyfikatorem sesji. Czasami może być używany koordynator transakcji rozproszonych firmy Microsoft (MS DTC). Jeśli usługa MS DTC jest używana, możesz również użyć instrukcji , aby zakończyć oddzielone i wątpliwe transakcje rozproszone.
Transact-SQL konwencje składni
Syntax
Składnia dla programu SQL Server, usługi Azure SQL Database i usługi Azure SQL Managed Instance:
KILL { session_id [ WITH STATUSONLY ] | UOW [ WITH STATUSONLY | COMMIT | ROLLBACK ] }
[ ; ]
Składnia dla usług Azure Synapse Analytics, Analytics Platform System (PDW) i Microsoft Fabric:
KILL 'session_id'
[ ; ]
Arguments
session_id
Identyfikator sesji procesu do końca.
session_id
jest unikatowym int przypisanym do każdego połączenia użytkownika po nawiązaniu połączenia. Wartość identyfikatora sesji jest powiązana z połączeniem przez czas trwania połączenia. Po zakończeniu połączenia wartość całkowita zostanie zwolniona i może zostać ponownie przypisana do nowego połączenia.
Poniższe zapytanie może pomóc w zidentyfikowaniu session_id
elementu, który chcesz zabić:
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
Określa jednostkę identyfikatora pracy (UOW) transakcji rozproszonych.
UOW to identyfikator GUID, który można uzyskać z request_owner_guid
kolumny dynamicznego sys.dm_tran_locks
widoku zarządzania.
UOW można również uzyskać z dziennika błędów lub za pośrednictwem monitora MS DTC. Aby uzyskać więcej informacji na temat monitorowania transakcji rozproszonych, zobacz dokumentację usługi MS DTC.
Służy KILL <UOW>
do zatrzymywania nierozwiązanych transakcji rozproszonych. Te transakcje nie są skojarzone z żadnym rzeczywistym identyfikatorem sesji, ale zamiast tego są skojarzone sztucznie z identyfikatorem sesji = -2
. Ten identyfikator sesji ułatwia identyfikowanie nierozwiązanych transakcji przez wykonywanie zapytań względem kolumny identyfikatora sesji w sys.dm_tran_locks
sys.dm_exec_sessions
sys.dm_exec_requests
widokach zarządzania dynamicznego .
WITH STATUSONLY
Służy do generowania raportu postępu dla określonego UOW lub session_id
wycofywania z powodu wcześniejszej KILL
instrukcji.
KILL WITH STATUSONLY
nie kończy się ani nie przywraca identyfikatora UOW ani sesji. Polecenie wyświetla tylko bieżący postęp wycofywania.
WITH COMMIT
Służy do zabijania nierozwiązanej transakcji rozproszonej z zatwierdzeniem. Tylko dotyczy transakcji rozproszonych, należy określić UOW , aby użyć tej opcji. Aby uzyskać więcej informacji, zobacz Transakcje rozproszone.
WITH ROLLBACK
Służy do zabijania nierozwiązanej transakcji rozproszonej z wycofywaniem. Tylko dotyczy transakcji rozproszonych, należy określić UOW , aby użyć tej opcji. Aby uzyskać więcej informacji, zobacz Transakcje rozproszone.
Remarks
KILL
jest często używany do zakończenia procesu, który blokuje inne ważne procesy z blokadami.
KILL
Umożliwia również zatrzymanie procesu wykonującego zapytanie korzystające z niezbędnych zasobów systemowych. Nie można zakończyć procesów i procesów systemu z rozszerzoną procedurą składowaną.
Należy ostrożnie używać KILL
, szczególnie w przypadku uruchamiania krytycznych procesów. Nie można zabić własnego procesu. Nie należy również zabijać następujących procesów:
AWAITING COMMAND
CHECKPOINT SLEEP
LAZY WRITER
LOCK MONITOR
SIGNAL HANDLER
Służy @@SPID
do wyświetlania wartości identyfikatora sesji (SPID) dla bieżącej sesji.
Aby uzyskać raport o aktywnych wartościach identyfikatorów sesji, wykonaj zapytanie dotyczące session_id
kolumny widoków sys.dm_tran_locks
zarządzania , sys.dm_exec_sessions
i sys.dm_exec_requests
dynamicznych. Możesz również wyświetlić kolumnę SPID
zwracaną przez sp_who
system procedurę składowaną. Jeśli wycofanie jest w toku dla określonego identyfikatora sesji, cmd
kolumna w sp_who
zestawie wyników dla tego identyfikatora sesji wskazuje .KILLED/ROLLBACK
Jeśli określone połączenie ma blokadę zasobu bazy danych i blokuje postęp innego połączenia, identyfikator sesji połączenia blokującego jest wyświetlany w blocking_session_id
kolumnie lub sys.dm_exec_requests
kolumnie blk
zwróconej przez sp_who
.
Polecenie KILL
może służyć do rozwiązywania wątpliwych transakcji rozproszonych. Te transakcje są nierozwiązane transakcje rozproszone, które występują z powodu nieplanowanych ponownych uruchomień serwera bazy danych lub koordynatora MS DTC. Aby uzyskać więcej informacji na temat transakcji wątpliwych, zobacz sekcję "Two-Phase Commit" w temacie Używanie oznaczonych transakcji do spójnego odzyskiwania powiązanych baz danych.
Użyj FUNKCJI ZE STANONLY
KILL WITH STATUSONLY
generuje raport, jeśli identyfikator sesji lub funkcja UOW zostanie wycofana z powodu poprzedniej KILL <session ID>
instrukcji lub KILL <UOW>
. Raport postępu określa ilość ukończonego wycofywania (w procentach) oraz szacowany czas pozostały (w sekundach). Raport zawiera go w następującej formie:
Spid|UOW <xxx>: Transaction rollback in progress. Estimated rollback completion: <yy>% Estimated time left: <zz> seconds
Jeśli wycofanie identyfikatora sesji lub UOW zakończy się przed uruchomieniem KILL <session ID> WITH STATUSONLY
instrukcji or KILL <UOW> WITH STATUSONLY
, KILL ... WITH STATUSONLY
zwraca następujący błąd:
"Msg 6120, Level 16, State 1, Line 1"
"Status report cannot be obtained. Rollback operation for Process ID <session ID> is not in progress."
Ten błąd występuje również w przypadku wycofania identyfikatora sesji lub UOW.
Ten sam raport o stanie można uzyskać, powtarzając tę samą KILL
instrukcję bez użycia WITH STATUSONLY
opcji. Jednak nie zalecamy powtarzania tej opcji w ten sposób. Jeśli powtórzysz instrukcję KILL <session_id>
, nowy proces może zostać zatrzymany, jeśli wycofanie zakończy się, a identyfikator sesji zostanie ponownie przydzielony do nowego zadania przed uruchomieniem nowej KILL
instrukcji. Zapobiegaj zatrzymywaniu nowego procesu, określając wartość WITH STATUSONLY
.
Permissions
SQL Server:ALTER ANY CONNECTION
Wymaga uprawnienia.
ALTER ANY CONNECTION
jest dołączany do członkostwa w rolach serwera stałego sysadmin lub processadmin .
SQL Database:KILL DATABASE CONNECTION
Wymaga uprawnienia. Nazwa logowania podmiotu zabezpieczeń na poziomie serwera ma KILL DATABASE CONNECTION
uprawnienia.
Magazyn danych usługi Microsoft Fabric: Wymaga uprawnienia Monitorowanie elementu lub członkostwa w roli Administratorzy obszaru roboczego.
Baza danych SQL w usłudze Microsoft Fabric:KILL DATABASE CONNECTION
Wymaga uprawnień w a aparatze bazy danych SQL lub uprawnienia Zapis elementu w obszarze roboczym Sieć szkieletowa.
Azure Synapse Analytics: Wymaga uprawnień administratora.
Examples
A. Używanie funkcji KILL do zatrzymywania sesji
W poniższym przykładzie pokazano, jak zatrzymać identyfikator 53
sesji .
KILL 53;
GO
B. Użyj identyfikatora sesji KILL ZE STANONLY, aby uzyskać raport postępu
Poniższy przykład generuje stan procesu wycofywania dla określonego identyfikatora sesji.
KILL 54;
KILL 54 WITH STATUSONLY;
GO
Oto zestaw wyników.
spid 54: Transaction rollback in progress. Estimated rollback completion: 80% Estimated time left: 10 seconds.
C. Użyj polecenia KILL, aby zatrzymać oddzieloną transakcję rozproszoną
W poniższym przykładzie pokazano, jak zatrzymać oddzieloną transakcję rozproszoną (identyfikator sesji = -2
) z funkcją UOW .D5499C66-E398-45CA-BF7E-DC9C194B48CF
KILL 'D5499C66-E398-45CA-BF7E-DC9C194B48CF';