2011-09-01 11 views
5

Czy ktoś może mi pomóc odczytać/zrozumieć ten wykres zakleszczenia?Czytanie wykresu zakleszczenia SQL

Nie rozumiem, dlaczego proces 75 żąda blokady obiektu, który już ma zablokowany?

Deadlock graph

+0

możesz wysłać odpowiedź "pokaż status innoDB", będzie to bardziej pouczające. Powinien zawierać ostatni impas – varela

+0

@varela - To jest SQL Server. jaques Jaką wersję? Wygląda jak problem paralelizmu. –

+0

@Martin Smith. SQL Server 2008 – Jacques

Odpowiedz

7

Według blogu, że znalazłem existance o „Exchange Event” wskazuje, że źródłem problemu może być równoległość w zapytaniu.

Today's Annoyingly-Unwieldy Term: "Intra-Query Parallel Thread Deadlocks"

Powyższy artykuł przechodzi w bardziej szczegółowo, jednak punchline jest:

Rozwiązanie nr 1: Dodaj indeks lub poprawić zapytanie, aby wyeliminować potrzebę równoległości. W większości przypadków użycie paralelizmu w zapytaniu oznacza, że ​​masz bardzo duże skanowanie, sortowanie lub dołączanie, które nie jest obsługiwane przez odpowiednie indeksy. Jeśli dostroisz zapytanie, często okaże się, że otrzymujesz znacznie szybszy i bardziej efektywny plan, który nie używa paralelizmu, a zatem nie podlega temu rodzajowi problemu. Oczywiście w przypadku niektórych zapytań (w szczególności zapytań typu DSS/OLAP) może być trudno wyeliminować wszystkie duże skany.

Obejście nr 2: Wymuś jednoetapowe wykonanie z podpowiedzią dotyczącą zapytania "OPCJA (MAXDOP 1)" na końcu zapytania. Jeśli nie możesz zmodyfikować zapytania, możesz zastosować wskazówkę do dowolnego zapytania z przewodnikiem po planie.

Możesz spróbować tego, aby sprawdzić, czy jest jakaś poprawa.

+0

Dzięki temu udało mi się zidentyfikować i ulepszyć wolne zapytanie i brak blokad od tego czasu. Nie wiesz, jak temu zapobiec w przyszłości? I dlaczego serwer SQL stara się być sprytny, jeśli istnieje możliwość, że może on sam wejść w stan zakleszczenia? (E.G Po co używać paralelizmu?) – Jacques

+0

Odnośnik odsyłacza koncentruje się na "czystym" zdarzeniu wewnątrz-kwerendowym, w którym występuje tylko jeden SPID (stąd "zapytanie wewnętrzne"). Wykres zakleszczenia pytań zawiera zdarzenie wymiany _plus_ bardziej tradycyjny zakleszczenie obejmujące 2 zapytania (inny SPID). Czytałem, że pojedyncze zdarzenia wymiany zakleszczeń mogą się same naprawić (ponieważ mogą wynikać z błędów wewnętrznych), więc należy się skupić na innych obiektach udostępnionych - w tym przypadku na blokadach strony. – crokusek

Powiązane problemy