2009-01-15 15 views
8

Otrzymuję ten błąd bardzo często, ale nie konsekwentnie na 2 stronach w aplikacji, która jest w środowisku produkcyjnym. Mam tylko kilka zrzutów ekranu poniżej tego błędu.SQL Server 2005: Deadlock transakcji

Transakcja (identyfikator procesu XX) została zablokowana na kłódce | buforuje zasoby komunikacyjne innym procesem i została wybrana jako ofiara zakleszczenia. Ponownie uruchom transakcję.

Jakie powinno być podejście do rozwiązania tego błędu. Serwer bazy danych to SQL Server 2005.

Odpowiedz

3

Ten numer article autorstwa Brada McGehee jest dobrym miejscem do rozpoczęcia.

3

Zobacz również tutaj: Proactive Deadlock Notifications

+0

Nie chcę wydawać się negatywny, ale używanie zdarzeń impulsu profilera jest zwykle miejscem do rozpoczęcia w SQL Server 2005, a raczej niż flagi śledzenia. –

1

Można zrobić jak sugeruje komunikat o błędzie i dostać program, aby ponowić próbę transakcję!

W dużym stopniu zależy od tego, jak "atomowa" jest transakcja! Oznacza to, że w przypadku zakleszczenia zablokowałeś to, że jakiś inny proces pomyślnie zaktualizował wiersz, który Cię interesuje. Czy w dalszym ciągu ma zastosowanie aktualizacja do wiersza?

Przynajmniej zaprezentować użytkownikowi ładniejszy komunikat błędu ("Inny użytkownik zmienił xxxx ty próbujesz zaktualizować. Proszę przejrzeć nowe wartości i spróbuj ponownie.)

2

Musisz uruchomić impasu Śledzenie profilu podczas występowania błędów The article autorstwa Brada McGehee jest przeglądem Należy zidentyfikować dwa obraźliwe procesy, a następnie przejrzeć kod na dwóch stronach, aby zobaczyć, jakie polecenia SQL są wydawane i jak często. czasu, stwierdziłem, że po prostu przeglądanie uruchamianego kodu SQL i wiedza o tym, jak często uruchamia się, szybko identyfikuje konflikt. Naprawienie go czasami zajmuje dłużej ...

Powiązane problemy