| Termin | Definicja |
|---|---|
| deadlock_graph | deadlock_graph to zdarzenie rozszerzone SQL Server rejestrujące szczegółową strukturę wykrytego zakleszczenia transakcji. Rola zdarzenia deadlock_graph w SQL Server
Zdarzenie nie opisuje wyłącznie faktu wystąpienia błędu. Rejestruje strukturę zależności pomiędzy uczestniczącymi procesami i zasobami. Dzięki temu można ustalić, które sesje brały udział w konflikcie, jakie instrukcje wykonywały, jakie blokady posiadały oraz na jakie blokady oczekiwały. Informacje są przedstawiane w formacie XML jako graf zakleszczenia, dlatego nazwa zdarzenia odnosi się do graficznego modelu relacji między procesami i zasobami, a nie do wykresu generowanego w postaci obrazu. Elementy raportu XML i interpretacja zależnościRaport generowany przez Część W raporcie występuje także informacja o wybranej ofierze zakleszczenia. SQL Server może preferować transakcję o niższym koszcie wycofania, a aplikacja może wpływać na ten wybór przez ustawienie priorytetu zakleszczenia. Jeżeli priorytety są takie same, znaczenie ma między innymi koszt wycofania pracy. Raport pozwala sprawdzić, czy przerwana została krótka instrukcja, czy transakcja, której cofnięcie wymagało odtworzenia większej liczby zmian. Rejestracja przez Extended Events i analiza powtarzalności
Jednorazowy raport należy traktować jako zapis konkretnego cyklu oczekiwania, a nie jako pełne wyjaśnienie wszystkich problemów z wydajnością. Przy analizie serii zdarzeń trzeba porównywać obiekty, indeksy, tryby blokad, kolejność instrukcji i identyfikatory procedur. Powtarzające się raporty z tym samym układem zasobów wskazują na wzorzec, który można odtworzyć. Różne raporty mogą natomiast dotyczyć odmiennych ścieżek wykonania, nawet gdy dotyczą tej samej tabeli. Warto także zestawić czas wystąpienia zakleszczenia z historią zmian schematu, obciążeniem aplikacji, planami wykonania i długością transakcji. Podczas odczytu danych z sesji Extended Events trzeba zachować oryginalny dokument XML. Ręczne kopiowanie tylko nazw tabel lub zapytań może usunąć informacje o indeksie, kluczu, partycji, poziomie izolacji albo stanie transakcji. Istotna jest również różnica między identyfikatorem sesji a identyfikatorem żądania: jedna sesja może wykonywać różne żądania w czasie, a w raporcie trzeba analizować kontekst konkretnego żądania uczestniczącego w zakleszczeniu. Wnioski z grafu przed zmianą kodu lub indeksówRaport Możliwe działania naprawcze zależą od konkretnego układu przedstawionego w XML. Stosuje się między innymi ujednolicenie kolejności dostępu do tabel, skrócenie zakresu transakcji, ograniczenie liczby modyfikowanych wierszy, poprawę predykatów, dobór indeksów oraz kontrolę poziomu izolacji. Aplikacja powinna również obsługiwać błąd zakleszczenia i ponowić całą transakcję zgodnie z zasadami właściwymi dla danego kodu, ponieważ SQL Server kończy wybraną transakcję błędem, a ponowienie pojedynczego polecenia może pozostawić logikę biznesową w niespójnym stanie. Diagnostyka na komputerze używanym do pracy z SQL Server powinna obejmować sprawdzenie dzienników aplikacji, konfiguracji połączenia, wersji sterownika oraz miejsca, w którym aplikacja rozpoczyna i zatwierdza transakcję. Samo wystąpienie |