Eksportuj (0) Drukuj
Rozwiń wszystko
Ten artykuł był przetłumaczony komputerowo. Oryginalny tekst zobaczysz, umieszczając wskaźnik myszy nad zdaniami w artykule. Więcej informacji.
Tłumaczenie
Oryginał

KILL (język Transact-SQL)

Powoduje zakończenie procesu użytkownika opartego na identyfikatorze sesji lub jednostce pracy. Jeśli określony identyfikator sesji lub jednostka pracy obejmuje dużą ilość pracy do wycofania, wykonanie instrukcji KILL może chwilę potrwać, zwłaszcza gdy powoduje wycofanie długiej transakcji.

Instrukcja KILL może być stosowana do kończenia normalnych połączeń, co wewnętrznie kończy transakcje skojarzone z określonym identyfikatorem sesji. Ponadto instrukcja umożliwia zakończenie oddzielonych i wątpliwych transakcji rozproszonych, gdy używana jest usługa Microsoft Distributed Transaction Coordinator (MS DTC).

Ikona łącza do tematu Konwencje składni języka Transact-SQL


KILL { session ID | UOW } [ WITH STATUSONLY ] 

session ID

Identyfikator sesji procesu, który ma być zakończony. session ID jest to unikatowa liczba całkowita (int), przypisywana do każdego połączenia użytkownika podczas jego tworzenia. Wartość identyfikatora sesji jest powiązana z połączeniem na czas trwania połączenia. Po zakończeniu połączenia wartość całkowita jest zwalniana i może być ponownie przypisana do nowego połączenia.

Użycie instrukcji KILL z parametrem session ID umożliwia kończenie zwykłych transakcji nierozproszonych i rozproszonych skojarzonych z określonym identyfikatorem sesji.

UOW

Określa identyfikator jednostki pracy transakcji rozproszonych. UOW jest to identyfikator GUID, który można uzyskać za pomocą kolumny request_owner_guid dynamicznego widoku zarządzania sys.dm_tran_locks. Ponadto identyfikator UOW można uzyskać za pomocą dziennika błędów lub monitorując usługę MS DTC. Aby uzyskać więcej informacji dotyczących monitorowania transakcji rozproszonych, zobacz dokumentację usługi MS DTC.

Użycie instrukcji KILL z parametrem UOW umożliwia zakończenie oddzielonych transakcji rozproszonych. Transakcje te są skojarzone zamiast z rzeczywistym identyfikatorem sesji, ze sztucznym identyfikatorem sesji = „-2”. Ułatwia to identyfikowanie oddzielonych transakcji za pomocą wykonywania zapytań na kolumnie identyfikatora sesji w dynamicznych widokach zarządzania sys.dm_tran_locks, sys.dm_exec_sessions lub sys.dm_exec_requests.

WITH STATUSONLY

Generuje raport o postępie dotyczący określonych identyfikatorów session ID lub UOW, które są wycofywane z powodu wcześniejszej instrukcji KILL. Polecenie KILL WITH STATUSONLY nie powoduje zakończenia lub wycofania transakcji dotyczących session ID lub UOW; powoduje tylko wyświetlenie bieżącego postępu wycofania.

Zwykle instrukcja KILL służy do zakończenia procesu blokującego inne ważne procesy lub wykonującego zapytanie przy użyciu zasobów systemowych. Nie jest możliwe zakończenie procesów systemowych i procesów uruchamiających rozszerzoną procedurę składowana.

Instrukcję KILL należy stosować bardzo ostrożnie, szczególnie gdy są uruchomione ważne procesy. Nie można stosować instrukcji KILL wobec własnego procesu. Nie należy stosować instrukcji KILL wobec następujących procesów:

  • AWAITING COMMAND

  • CHECKPOINT SLEEP

  • LAZY WRITER

  • LOCK MONITOR

  • SIGNAL HANDLER

Instrukcja @@SPID umożliwia wyświetlenie wartości identyfikatora bieżącej sesji.

Aby uzyskać raport o wartościach aktywnych identyfikatorów sesji, należy uruchomić zapytanie dotyczące kolumny session_id w dynamicznych widokach zarządzania sys.dm_tran_locks, sys.dm_exec_sessions i sys.dm_exec_requests. Ponadto można wyświetlić kolumnę SPID zwracaną przez procedurę składowaną w systemie sp_who. Jeśli trwa wycofywanie dotyczące określonego identyfikatora SPID, kolumna cmd w zestawie wyników sp_who dla tego identyfikatora SPID będzie wskazywała KILLED/ROLLBACK.

Jeśli w określonym połączeniu występuje blokada zasobu bazy danych i połączenie blokuje postęp innego połączenia, identyfikator sesji blokującego połączenia jest wyświetlany w kolumnie blocking_session_id sys.dm_exec_requests lub kolumnie blk zwracanej przez sp_who.

Polecenie KILL może służyć do rozwiązywania wątpliwych transakcji rozproszonych. Nierozwiązane transakcje rozproszone występują z powodu nieplanowanych ponownych uruchomień serwera bazy danych lub usługi Microsoft Distributed Transaction Coordinator (MS DTC). Aby uzyskać więcej informacji dotyczących wątpliwych transakcji, zobacz temat „Dwufazowe zatwierdzanie” w części Użyj oznaczone transakcji do odzyskania powiązanych baz danych konsekwentnie (pełnego modelu odzyskiwania).

Używanie instrukcji WITH STATUSONLY

Instrukcja KILL WITH STATUSONLY powoduje generowanie raportu, tylko jeśli trwa wycofywanie identyfikatora sesji lub jednostki pracy wywołane przez poprzednią instrukcję KILL session ID |Instrukcja UOW. Raport o postępie podaje informacje o wielkości ukończenia wycofywania (w procentach) i szacunkowy czas pozostały do zakończenia (w sekundach) w następującym formacie:

Spid|UOW <xxx>: Transaction rollback in progress. Estimated rollback completion: <yy>% Estimated time left: <zz> seconds

Jeśli wycofywanie identyfikatora sesji lub jednostki pracy (UOW) zostało zakończone po wykonaniu instrukcji KILL session ID | UOW WITH STATUSONLY lub jeśli żaden identyfikator sesji ani jednostka pracy (UOW) nie są wycofywane, instrukcja KILL session ID| UOW WITH STATUSONLY zwróci 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 sam raport o stanie można uzyskać, powtarzając tę samą instrukcję KILL session ID | UOW bez użycia opcji WITH STATUSONLY; jednak nie jest to zalecane. Powtórzenie instrukcji KILL session ID może zakończyć nowy proces, jeśli wycofywanie zakończyło się i identyfikator sesji został ponownie przypisany do nowego zadania przed uruchomieniem nowej instrukcji KILL. Użycie opcji WITH STATUSONLY zapobiega takim przypadkom.

Wymaga uprawnienia ALTER ANY CONNECTION. Uprawnienie ALTER ANY CONNECTION zawierają stałe role serwera sysadmin i processadmin.

A.Używanie instrukcji KILL do zakończenia sesji

W poniższym przykładzie pokazano sposób zakończenia sesji o identyfikatorze 53.

KILL 53;
GO
KILL 53;
GO

B.Użycie instrukcji KILL z identyfikatorem sesji i opcją WITH STATUSONLY do generowania raportu o postępie

W poniższym przykładzie generowany jest stan procesu wycofywania dla określonego identyfikatora sesji.

KILL 54;
KILL 54 WITH STATUSONLY;
GO

--This is the progress report.
spid 54: Transaction rollback in progress. Estimated rollback completion: 80% Estimated time left: 10 seconds.
KILL 54;
KILL 54 WITH STATUSONLY;
GO

--This is the progress report.
spid 54: Transaction rollback in progress. Estimated rollback completion: 80% Estimated time left: 10 seconds.

C.Użycie instrukcji KILL do zakończenia oddzielonej transakcji rozproszonej

W następnym przykładzie pokazano sposób zakończenia oddzielonej transakcji rozproszonej (identyfikator sesji = -2) przy użyciu parametru jednostki pracy (UOW) o wartości D5499C66-E398-45CA-BF7E-DC9C194B48CF.

KILL 'D5499C66-E398-45CA-BF7E-DC9C194B48CF';
KILL 'D5499C66-E398-45CA-BF7E-DC9C194B48CF';

Zawartość społeczności

Dodaj
Pokaż:
© 2014 Microsoft