Udostępnij za pośrednictwem


KILL (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punkt końcowy analizy SQL w usłudze Microsoft FabricMagazyn w usłudze Microsoft FabricBaza 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_lockssys.dm_exec_sessionssys.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_lockszarządzania , sys.dm_exec_sessionsi 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 53sesji .

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