Naprawdę mam problemy ze śledzeniem blokowania, którego doświadczamy.
Rdzeń blokujący status SPID to „spanie”, cmd to „OCZEKUJĄCE POLECENIE” i tak sqltext
jest SET TRANSACTION ISOLATION LEVEL READ COMMITTED
.
Kiedy przeglądam raport Najważniejsze transakcje według liczby zablokowanych transakcji, blokująca instrukcja SQL ma wartość „-”.
Przeprowadziłem śledzenie SQL, a kiedy następuje blokowanie, śledzenie SPID blokującego rootowanie, ale tak naprawdę nigdzie mnie to nie doprowadziło. Ostatnia instrukcja śledzenia jest taka sama jak sqltext
powyżej SET TRANSACTION ISOLATION LEVEL READ COMMITTED
.
Sprawdziłem wszystkie powiązane procedury przechowywane, które mogę znaleźć, aby upewnić się, że mają TRY / CATCH BEGIN TRAN / COMMIT TRAN / ROLLBACK TRAN (używamy procedur przechowywanych do wszystkiego, więc nie są uruchamiane samodzielne instrukcje). Ten problem zaczął się pojawiać w ciągu ostatnich 24 godzin i nikt nie twierdzi, że wprowadził jakiekolwiek zmiany w systemie.
Rozwiązanie: jedna z naszych rzadko używanych procedur przechowywanych miała błąd z wstawką (liczba kolumn nie pasowała), ale nadal jesteśmy zdezorientowani, co dokładnie się dzieje.
Przeglądając wszystkie informacje śledzenia, instrukcja EXEC dla tej procedury składowanej była wymieniona czasami, ale NIGDY nie przed wystąpieniem BLOKU na blokującym SPID. Wydawało się, że kiedy zaczyna się blokować, ślad nie rejestruje jego wykonania (ani żadnej z zawartych w nim instrukcji). Jednak zdarzają się inne czasy, gdy ślad zarejestrował jego wykonanie i nie nastąpiło blokowanie.
Raport o błędzie procedury składowanej pochodzi od użytkownika, a ja byłem w stanie znaleźć wiele instrukcji EXEC w plikach śledzenia i uruchomić je w SSMS. Nie miałem czasu, kiedy je prowadziłem, czy zdarzyło się, że nastąpiło jakieś zablokowanie, czy też się zawiesiły. Działały zgodnie z oczekiwaniami (blok catch został uruchomiony i wycofał transakcję po błędzie). Po rozwiązaniu problemu z procedurą przechowywaną problem nie pojawił się ponownie.