Wykrywanie i końcowa zakleszczenia

Zakleszczenie występuje, gdy dwa lub więcej zadań trwale blok sobie nawzajem za poszczególne zadania o blokada do zasób, którego chcesz zablokować inne zadania.Następujące prezenty wykresu wysokiego poziom widoku zakleszczenie podać, gdzie:

  • Zadanie T1 ma blokada zasobu R1 (wskazywany przez strzałkę R1 T1) i żąda blokada na zasób R2 (wskazywany przez strzałkę T1 R2).

  • Zadania T2 ma blokada na zasób R2 (wskazywany przez strzałkę R2 T2) i żąda blokada zasobu R1 (wskazywany przez strzałkę T2 R1).

  • Ponieważ ani zadań może być kontynuowany do momentu zasób jest dostępny i może być zwolnione ani zasobów, dopóki zadanie nadal istnieje stanu zakleszczenie.

Diagram showing tasks in a deadlock state

The SQL Server Database Engine automatically detects zakleszczenie cycles within SQL Server. The Database Engine chooses one of the sessions as a zakleszczenie victim and the current transaction is terminated with an error to break the zakleszczenie.

Zasoby, które można zakleszczenie

Każda sesja użytkownika może zawierać jeden lub więcej zadań, uruchomionych w jego imieniu, w którym każde zadanie może być nabycia lub czekać na uzyskanie różnych źródeł.Następujące typy zasobów może spowodować, że blokowania może spowodować zakleszczenie.

  • Blokuje.Oczekiwanie na uzyskanie blokady na zasoby, takie jak obiekty, strony, wiersze, metadane i aplikacji może być przyczyną zakleszczenie.Na przykład transakcja T1 ma udostępnionych blokady (S) w wierszu r1 i oczekuje na uzyskiwanie blokada wyłączności (X) na r2.T2 transakcji zostało udostępnione blokady (S) na r2 i oczekuje na uzyskiwanie blokada wyłączności (X) w wierszu r1.To wyniki cyklu blokada, w którym T1 i T2 czekać na siebie do zwolnienia zasobów zablokowane.

  • Wątki robocze.Kolejki zadań oczekujących na wątek roboczy dostępnych może być przyczyną zakleszczenie.Jeśli zadanie w kolejce jest właścicielem zasobów, które blokują wszystkich wątków roboczych, będą powodować zakleszczenie.Na przykład sesja S1 rozpoczyna transakcję i uzyskuje udostępnionego blokada (S) na wiersz r1 i przejdzie w stan uśpienia.Aktywne sesje uruchomione na wszystkich wątków roboczych dostępnych próbuje uzyskać wyłączny (blokad dla wiersza r1 X).Ponieważ sesja S1 nie można pobrać wątek roboczy, nie zatwierdzeniu transakcji i zwolnić blokadę r1 wiersza.To wyniki w zakleszczenie.

  • Pamięć.Gdy równoczesne żądania oczekują na dotacji pamięci, które nie mogą zostać wykonane z dostępnej pamięci, może wystąpić, zakleszczenie.Na przykład dwa równoczesne kwerendy Q1 i Q2, wykonać funkcji zdefiniowanej przez użytkownika, który odpowiednio zdobycie 10 MB i 20 MB pamięci.Jeśli każdej kwerendy wymaga 30 MB, a całkowita dostępna pamięć jest 20 MB, następnie Q1 i Q2 musi czekać na siebie zwolnić pamięć, a to powoduje zakleszczenie.

  • Równoległe zasobów związanych z wykonania kwerendy Koordynator, producent lub wątki konsumenta skojarzonego z portem wymiany może blokować wzajemnie przyczyną zakleszczenie zwykle, gdy w tym co najmniej jeden inny proces nie jest częścią kwerendy równoległych.Ponadto równoległych kwerendy rozpoczęcia wykonania, SQL Server Określa stopień proste lub liczbę wątków roboczych, na podstawie bieżącego obciążenia pracą. Jeżeli nieoczekiwanie zmienia obciążenie systemu, na przykład, jeżeli nowe kwerendy uruchomić uruchomionych na serwerze lub system jest uruchamiany z wątków roboczych, zakleszczenie może nastąpić.

  • Wiele zestawów wyników Active (MARS) zasobów.Te zasoby są używane do kontrolowania przekładania wiele żądań aktywnym obszarze MARS (patrz Środowisko wykonanie zadań wsadowych oraz MARS).

    • Zasób użytkownika.Gdy wątek oczekuje na zasób, który potencjalnie jest kontrolowane przez aplikację użytkownika, zasób jest uważana za zasób zewnętrznych lub użytkowników i jest traktowany jak blokada.

    • wykluczanie wzajemne sesja.Z zadań, uruchomionych w jednej sesja są przeplotem, co oznacza tylko jednego zadania mogą być uruchamiane w sesja na danego czas.Zanim zadanie można uruchomić, musi on mieć wyłączny dostęp do obiektu wykluczanie wzajemne sesja.

    • wykluczanie wzajemne transakcji.Z wszystkich zadań uruchomionych w jednej transakcji są przeplotem, co oznacza tylko jednego zadania mogą być uruchamiane w transakcji w danego czas.Zanim zadanie można uruchomić, musi on mieć wyłączny dostęp do obiektu wykluczanie wzajemne transakcji.

    Aby zadanie ma być uruchamiany w systemie serwera MARS to muszą nabyć wykluczanie wzajemne sesja.Jeśli zadanie jest uruchomione w ramach transakcji, musi następnie pobrać obiektu wykluczanie wzajemne transakcji.Ta metoda gwarantuje to tylko jedno zadanie jest aktywne w danej sesja i transakcji danej chwili.Gdy nabyli wymagane muteksy mogą wykonywać zadanie.Kiedy zakończenie zadań lub wydajność w środku żądania, najpierw będzie go zwolnić wykluczanie wzajemne transakcji, a po nim obiektu wykluczanie wzajemne sesja w odwrotnej kolejności ich nabycia.Jednak zakleszczenia może wystąpić z tych zasobów.W poniższym przykładzie, dwa zadania, żądanie użytkownika U1 i żądanie użytkownika U2, są uruchomione w tej samej sesja.

    U1:    Rs1=Command1.Execute("insert sometable EXEC usp_someproc");
    U2:    Rs2=Command2.Execute("select colA from sometable");
    

    Wykonywanie procedura przechowywana z żądania użytkownika U1 uzyskał wykluczanie wzajemne sesja.Jeśli procedura przechowywana zajmuje dużo czas na wykonać, przyjmowana jest przez Database Engine Aby procedura przechowywana oczekuje na dane wejściowe od użytkownika. Żądanie użytkownika U2 czeka, aż wykluczanie wzajemne sesja, gdy użytkownik czeka, aż U2 zestaw wyników, a U1 oczekuje na zasób użytkownika.Jest to stanu zakleszczenie logicznie przedstawione jako:

Logic diagram showing user process deadlock.

Wykrywanie zakleszczenie

Wszystkie zasoby wymienione w powyższej sekcji uczestniczyć w Database Engine schemat wykrywania zakleszczenie. zakleszczenie wykrywania jest wykonywany przez blokowanie wątek monitorowania, który okresowo inicjuje wyszukiwanie przy użyciu wszystkich zadań w wystąpieniu Database Engine. Następujących punktach opisano proces wyszukiwania:

  • Domyślny interwał wynosi 5 sekund.

  • Jeśli blokada wątek monitorowania znajdzie zakleszczenie, interwał wykrywanie zakleszczenie powoduje usunięcie z 5 sekund, aby jak 100 milisekund w zależności od częstotliwości zakleszczenie.

  • Jeśli blokada wątek monitorowania zatrzymuje wyszukiwanie zakleszczenia, Database Engine Zwiększa odstępy między wyszukiwania do 5 sekund.

  • Jeśli zakleszczenie tylko wykryto, zakłada się, wprowadzając następnego wątków, które musi czekać na blokadę zakleszczenie cyklu.Pierwsze kilka czeka Blokada po wykryciu zakleszczenie będą natychmiast wyzwala wyszukiwanie zakleszczenie zamiast poczekać na następny interwał wykrywanie zakleszczenie.Na przykład, jeśli z bieżącym interwałem jest 5 sekund, a nieaktywnych blokada właśnie został wykryty, następnego blokada oczekiwania będzie odskakują poza nieaktywnych blokada detektor natychmiast.Jeśli oczekiwanie na blokadę zakleszczenie, zostaną wykryte od razu, a nie podczas wyszukiwania następnej zakleszczenie.

The Database Engine typically performs periodic zakleszczenie detection only. Ponieważ liczba zakleszczenie w systemie jest zazwyczaj mała, wykrywanie zakleszczenie okresowe pomaga zmniejszyć obciążenie związane z wykrywanie zakleszczenie w systemie.

Gdy monitor blokada inicjuje zakleszczenie wyszukiwanie określonego wątku, identyfikuje zasób, na którym wątek oczekuje.Monitor blokada następnie wyszukuje armatora(-ów) dla danego zasób i rekursywnie kontynuuje wyszukiwanie zakleszczenie tych wątków do momentu, aż znajdzie cyklu.W ten sposób cyklu stanowi zakleszczenie.

Po wykryciu zakleszczenie, Database Engine kończy się zakleszczenie, wybierając jeden z wątków jako ofiara zakleszczenie. The Database Engine terminates the current partia being executed for the wątek, rolls back the transaction of the zakleszczenie victim, and returns a 1205 error to the application. Wycofywanie transakcji dotyczącej ofiara zakleszczenie zwalnia wszystkie blokady przechowywane przez transakcję.Dzięki temu transakcje z innych wątków odblokowany i w dalszym ciągu.Błąd ofiara zakleszczenie 1205 rejestruje informacje o wątki i zasoby zaangażowane w zakleszczenie dziennik błędów.

Domyślnie Database Engine wybiera jako ofiara zakleszczenie sesja uruchomioną transakcję, która znajduje się najniższych do przywrócenia. Można również w sytuacji zakleszczenie, za pomocą instrukcja zestaw DEADLOCK_PRIORITY priorytet sesji można określić użytkownika.DEADLOCK_PRIORITY zestaw LOW, NORMAL lub wysokie lub też zestaw na dowolną liczbą całkowitą z zakres (-10-10).Domyślnie priorytet zakleszczenie NORMAL.Jeśli dwie sesje zakleszczenie różne priorytety, sesja o niższym priorytecie jest wybrany jako ofiara zakleszczenie.Jeśli zarówno sesje mają ten sam priorytet zakleszczenie, wybierany jest sesja z transakcją najniższych do przywrócenia.Jeśli ten sam priorytet zakleszczenie oraz koszt tej samej sesji uczestniczących w cyklu zakleszczenie, ofiarą jest wybrany losowo.

Podczas pracy z CLR, monitor zakleszczenie automatycznie wykrywa zakleszczenie zasobów synchronizacji (monitorów, czytnik/modułu zapisującego blokada i wątek łączyć), dostęp do wewnątrz procedury zarządzanych.Jednak zakleszczenie jest rozwiązywany przez generowania wyjątek w procedurze, który został wybrany jako ofiara zakleszczenie.Ważne jest zrozumieć, że wyjątek nie automatycznie zwalnia zasoby aktualnie własnością ofiary; zasoby muszą być jawnie zwolnione.Zgodnie z zachowaniem wyjątek, wyjątek, używany do identyfikowania ofiara zakleszczenie może być złowionych i odrzucone.

Narzędzia informacje o zakleszczenie

Aby wyświetlić informacje zakleszczenie Database Engine dostarcza narzędzi do monitorowania w formie dwie flagi śledzenia i zdarzenie wykresu zakleszczenie w SQL Server Profiler.

Flaga 1204 i flagi śledzenia 1222 śledzenia

Gdy zakleszczenia, flagi śledzenia 1204 i śledzenia Flaga 1222 zwrotu informacje, które są przechwytywane w SQL Server 2005 Dziennik błędów. Flaga raportów 1204 zakleszczenie informacje sformatowane przez każdy węzeł w zakleszczenie śledzenia.Śledzenie informacji zakleszczenie formaty 1222 flagi, najpierw przez procesy, a następnie według zasobów.Istnieje możliwość włączenia obie flagi śledzenia uzyskanie dwóch reprezentacji tego samego zdarzenie zakleszczenie.

Dodatkowo, oprócz definiowania właściwości flagi śledzenia 1204 i 1222, w następującej tabela pokazano również podobieństw i różnic.

Właściwość

Flaga 1204 i flagi śledzenia 1222 śledzenia

Śledzenie tylko flagi 1204

Śledzenie tylko flagi 1222

Format danych wyjściowych

Dane wyjściowe są przechwytywane w SQL Server 2005 Dziennik błędów.

Koncentruje się na węzłach z zakleszczenie.Każdy węzeł dysponuje dedykowanej sekcji, a w końcowej części opisano ofiara zakleszczenie.

Zwraca informacje w formacie przypominającym XML, który nie jest zgodna do schematu definicji schematu XML (XSD).Format ma trzy główne części.Pierwsza sekcja deklaruje ofiara zakleszczenie.Druga sekcja zawiera opis każdego procesu w zakleszczenie.Trzecia sekcja opisuje zasoby, które są synonimem węzłów flagi śledzenia 1204.

Identyfikowanie atrybutów

SPID:<x> ECID:<x>. Identyfikuje wątek identyfikator procesu systemowego w przypadku równoległego procesów. Zapis SPID:<x> ECID:0, gdzie <x> zastępuje wartość identyfikatora SPID, reprezentuje wątek głównego. Zapis SPID:<x> ECID:<y>, gdzie <x> zastępuje wartość identyfikatora SPID i <y> jest większa niż 0, oznacza sub-threads dla tego samego identyfikatora SPID.

BatchID (sbid flagi śledzenia 1222).Identyfikuje partia, z których kodu wykonanie żądania lub przytrzymanie blokada.Gdy wiele zestawów wyników Active (MARS) jest wyłączona, wartość BatchID jest równa 0.Po włączeniu MARS wartość instancje aktywny jest 1, aby n. Jeśli w sesja nie ma żadnych aktywnych instancje, BatchID jest równa 0.

Tryb.Określa typ blokada dla określonego zasób, który jest wymagane, przyznane lub 15–30 przez wątek.Tryb może być IS (wspólne opcje), S (udostępniany), U (aktualizacja), IX (opcje wyłączny), SIX (udostępnione z wyłącznością opcje), a X (z wyłączeniem).Aby uzyskać więcej informacji zobaczTryby blokada.

Wiersz # (wiersz flagi śledzenia 1222).Wyświetla numer wiersza w bieżącej instancji instrukcji było wykonywane po wystąpieniu zakleszczenie.

Dane wejściowe w buforze (inputbuf flagi śledzenia 1222).Wyświetla listę wszystkich instrukcji w bieżącej partia.

Węzeł.Przedstawia numer wpisu w łańcuchu zakleszczenie.

Wyświetla listę.Właściciel blokada może być częścią tych list:

  • Udzielanie listy.Wylicza bieżącego właścicieli zasób.

  • Konwertowanie listy.Wylicza bieżącego właścicieli, które próbujesz konwertować ich blokad na wyższy poziom.

  • Poczekaj, lista.Wylicza bieżącego nowe żądania blokada dla zasób.

Typ instrukcja.W tym artykule opisano typ instrukcja DML (SELECT, INSERT, UPDATE lub DELETE) uprawnień wątki.

Właściciel zasób ofiarą.Określa uczestniczących wątek SQL Server wybiera jako ofiara, aby przerwać cykl zakleszczenie. Wybrany wątek i wszystkie istniejące sub-threads zostają zakończone.

Następny gałęzi.Reprezentuje sub-threads dwa lub więcej z tego samego identyfikatora SPID uczestniczących w cyklu zakleszczenie.

ofiara zakleszczenie.Reprezentuje adres pamięci fizycznej (patrz zadania sys.dm_os_tasks (Transact-SQL)), został wybrany jako ofiara zakleszczenie. przypadek braku nierozwiązane zakleszczenie może być 0 (zero).Zadanie, które jest wycofywanie nie może zostać wybrany jako ofiara zakleszczenie.

executionstack.Reprezentuje Transact-SQL kod, który nie jest wykonywane na czas Zakleszczenie występuje.

priorytet.Reprezentuje priorytet zakleszczenie.W niektórych przypadkach Database Engine mogą wybrać, aby zmienić priorytet zakleszczenie na krótki czas trwania osiągnąć lepszą współbieżność.

logused.Rejestrowanie zajmowane przez zadanie.

Identyfikator właściciela.Identyfikator transakcji, która ma kontrolę nad żądania.

Stan.Stan zadania.Jest to jeden z następujących wartości:

  • Oczekujące.Oczekiwanie na wątek roboczego.

  • runnable.Gotowe do uruchomienia, ale Trwa oczekiwanie na kwant.

  • Uruchamianie.Aktualnie uruchomione na do harmonogramu.

  • zawieszone.Wykonywanie jest wstrzymana.

  • Sporządzono.Zadanie zostało ukończone.

  • spinloop.Oczekiwanie na spinlock stać się wolne.

waitresource.Zasób wymagany przez zadanie.

waittime.Czas w milisekundach oczekiwania dla zasób.

schedulerid.Harmonogram skojarzonych z tym zadaniem.Zobacz sys.dm_os_schedulers (języka Transact-SQL).

Nazwa hosta.Nazwa stacja robocza.

IsolationLevel.Bieżący poziom izolacji transakcji.

Xactid.Identyfikator transakcji, która ma kontrolę nad żądania.

currentdb.Identyfikator bazy danych.

lastbatchstarted.Ostatnia czas wsadowe uruchomienia procesu klient.

lastbatchcompleted.Podczas ostatniego partia ukończyć procesu klient.

clientoption1 i clientoption2.Ustawianie opcji dla tego połączenia klient.Jest to maskę bitową, która zawiera informacje na temat opcji, zazwyczaj sterowany instrukcje zestaw, takie jak zestaw NOCOUNT i XACTABORT zestaw.

associatedObjectId.Reprezentuje HoBT (sterty lub B-drzewo) identyfikator.

Atrybutów zasób

IDENTYFIKATOR RID.Identyfikuje jeden wiersz w tabela, w której blokada przechowywane lub żądanie.RID jest reprezentowana jako RID: db_id:file_id:page_no:row_no. Na przykład RID: 6:1:20789:0.

OBIEKT.Określa tabela, w której blokada przechowywane lub żądanie.OBIEKT jest reprezentowana jako obiekt: db_id:object_id. Na przykład TAB: 6:2009058193.

KLUCZ.Identyfikuje klucz zakresem indeksu, w której blokada przechowywane lub żądanie.KLUCZ jest reprezentowana jako klucz: db_id:hobt_id (index key hash value).For example, KEY: 6:72057594057457664 (350007a4d329).

PAG.Identyfikuje zasób strona, na którym blokada utrzymywane lub żądanie.PAG jest reprezentowana jako PAG: db_id:file_id:page_no.For example, PAG: 6:1:20789.

ROZSZERZENIE.Identyfikuje fragment struktury.Napis EXT jest reprezentowana jako napis EXT: db_id:file_id:extent_no.For example, EXT: 6:1:9.

DB.Identyfikuje blokada bazy danych.DB jest reprezentowana w jednym z następujących sposobów:

  • DB: db_id

  • DB: db_id[BULK-OP-DB], która identyfikuje blokada bazy danych, podejmowanych przez kopia zapasowa bazy danych.

  • DB: db_id[BULK-OP-dziennik], która identyfikuje blokada podejmowanych przez kopii zapasowych dziennika dla określonej bazy danych.

APLIKACJA.Identyfikuje blokada podejmowanych przez zasób aplikacji.APLIKACJA jest reprezentowana jako aplikacja: lock_resource.For example, APP: Formf370f478.

METADANE.Reprezentuje zasoby metadane związanych z zakleszczenie.Ponieważ metadane ma wiele subresources, zwrócona wartość zależy od subresource, który został zakleszczony.For example, METADATA.USER_TYPE returns user_type_id = <integer_value>.Aby uzyskać więcej informacji na temat zasobów metadane i subresources zobacz sys.dm_tran_locks (języka Transact-SQL).

HOBT.Reprezentuje sterty lub B-drzewo zaangażowane w zakleszczenie.

Brak wyłącznie dla tej flagi śledzenia.

Brak wyłącznie dla tej flagi śledzenia.

Przykład 1204 flagi śledzenia

W poniższym przykładzie przedstawiono dane wyjściowe, po włączeniu flagi śledzenia 1204.W takim przypadek sterty z indeksów nie jest tabelą w węźle 1, a tabela w węzeł 2 jest sterty o indeks nieklastrowany.Indeks klucz w węzeł 2 jest aktualizowany po wystąpieniu zakleszczenie.

Deadlock encountered .... Printing deadlock information
Wait-for graph

Node:1

RID: 6:1:20789:0               CleanCnt:3 Mode:X Flags: 0x2
 Grant List 0:
   Owner:0x0315D6A0 Mode: X        
     Flg:0x0 Ref:0 Life:02000000 SPID:55 ECID:0 XactLockInfo: 0x04D9E27C
   SPID: 55 ECID: 0 Statement Type: UPDATE Line #: 6
   Input Buf: Language Event: 
BEGIN TRANSACTION
EXEC usp_p2
 Requested By: 
   ResType:LockOwner Stype:'OR'Xdes:0x03A3DAD0 
     Mode: U SPID:54 BatchID:0 ECID:0 TaskProxy:(0x04976374) Value:0x315d200 Cost:(0/868)

Node:2

KEY: 6:72057594057457664 (350007a4d329) CleanCnt:2 Mode:X Flags: 0x0
 Grant List 0:
   Owner:0x0315D140 Mode: X        
     Flg:0x0 Ref:0 Life:02000000 SPID:54 ECID:0 XactLockInfo: 0x03A3DAF4
   SPID: 54 ECID: 0 Statement Type: UPDATE Line #: 6
   Input Buf: Language Event: 
     BEGIN TRANSACTION
EXEC usp_p1
 Requested By: 
   ResType:LockOwner Stype:'OR'Xdes:0x04D9E258 
     Mode: U SPID:55 BatchID:0 ECID:0 TaskProxy:(0x0475E374) Value:0x315d4a0 Cost:(0/380)

Victim Resource Owner:
 ResType:LockOwner Stype:'OR'Xdes:0x04D9E258 
     Mode: U SPID:55 BatchID:0 ECID:0 TaskProxy:(0x0475E374) Value:0x315d4a0 Cost:(0/380)

Przykład 1222 flagi śledzenia

W poniższym przykładzie przedstawiono dane wyjściowe, po włączeniu flagi śledzenia 1222.W takim przypadek sterty z indeksów nie jest jedna tabela, a drugiej tabeli jest sterty o indeks nieklastrowany.Z drugiej tabela klucz indeks jest aktualizowany po wystąpieniu zakleszczenie.

deadlock-list
 deadlock victim=process689978
  process-list
   process id=process6891f8 taskpriority=0 logused=868 
   waitresource=RID: 6:1:20789:0 waittime=1359 ownerId=310444 
   transactionname=user_transaction 
   lasttranstarted=2005-09-05T11:22:42.733 XDES=0x3a3dad0 
   lockMode=U schedulerid=1 kpid=1952 status=suspended spid=54 
   sbid=0 ecid=0 priority=0 transcount=2 
   lastbatchstarted=2005-09-05T11:22:42.733 
   lastbatchcompleted=2005-09-05T11:22:42.733 
   clientapp=Microsoft SQL Server Management Studio - Query 
   hostname=TEST_SERVER hostpid=2216 loginname=DOMAIN\user 
   isolationlevel=read committed (2) xactid=310444 currentdb=6 
   lockTimeout=4294967295 clientoption1=671090784 clientoption2=390200
    executionStack
     frame procname=AdventureWorks.dbo.usp_p1 line=6 stmtstart=202 
     sqlhandle=0x0300060013e6446b027cbb00c69600000100000000000000
     UPDATE T2 SET COL1 = 3 WHERE COL1 = 1;     
     frame procname=adhoc line=3 stmtstart=44 
     sqlhandle=0x01000600856aa70f503b8104000000000000000000000000
     EXEC usp_p1     
    inputbuf
      BEGIN TRANSACTION
EXEC usp_p1
   process id=process689978 taskpriority=0 logused=380 
   waitresource=KEY: 6:72057594057457664 (350007a4d329)   
   waittime=5015 ownerId=310462 transactionname=user_transaction 
   lasttranstarted=2005-09-05T11:22:44.077 XDES=0x4d9e258 lockMode=U 
   schedulerid=1 kpid=3024 status=suspended spid=55 sbid=0 ecid=0 
   priority=0 transcount=2 lastbatchstarted=2005-09-05T11:22:44.077 
   lastbatchcompleted=2005-09-05T11:22:44.077 
   clientapp=Microsoft SQL Server Management Studio - Query 
   hostname=TEST_SERVER hostpid=2216 loginname=DOMAIN\user 
   isolationlevel=read committed (2) xactid=310462 currentdb=6 
   lockTimeout=4294967295 clientoption1=671090784 clientoption2=390200
    executionStack
     frame procname=AdventureWorks.dbo.usp_p2 line=6 stmtstart=200 
     sqlhandle=0x030006004c0a396c027cbb00c69600000100000000000000
     UPDATE T1 SET COL1 = 4 WHERE COL1 = 1;     
     frame procname=adhoc line=3 stmtstart=44 
     sqlhandle=0x01000600d688e709b85f8904000000000000000000000000
     EXEC usp_p2     
    inputbuf
      BEGIN TRANSACTION
EXEC usp_p2    
  resource-list
   ridlock fileid=1 pageid=20789 dbid=6 objectname=AdventureWorks.dbo.T2 
   id=lock3136940 mode=X associatedObjectId=72057594057392128
    owner-list
     owner id=process689978 mode=X
    waiter-list
     waiter id=process6891f8 mode=U requestType=wait
   keylock hobtid=72057594057457664 dbid=6 objectname=AdventureWorks.dbo.T1 
   indexname=nci_T1_COL1 id=lock3136fc0 mode=X 
   associatedObjectId=72057594057457664
    owner-list
     owner id=process6891f8 mode=X
    waiter-list
     waiter id=process689978 mode=U requestType=wait

Zdarzenie Graph zakleszczenie programu profilującego

Jest to zdarzenie SQL Server Profiler który przedstawia graficzny sceny zadań i zasobów związanych z zakleszczenie. W poniższym przykładzie przedstawiono dane wyjściowe SQL Server Profiler Kiedy jest włączany zdarzenie wykresu zakleszczenie.

Logic flow diagram showing user process deadlock.

Aby uzyskać więcej informacji na temat uruchamiania SQL Server Profiler Zakleszczenie wykresu, zobacz Analyzing Deadlocks with SQL Server Profiler.