Ostatnio jedna z naszych aplikacji ASP.NET wyświetliła błąd zakleszczenia bazy danych i zostałem poproszony o sprawdzenie i naprawienie błędu. Udało mi się znaleźć przyczynę impasu w procedurze przechowywanej, która rygorystycznie aktualizowała tabelę w obrębie kursora.
Po raz pierwszy widziałem ten błąd i nie wiedziałem, jak skutecznie go śledzić i naprawić. Wypróbowałem wszystkie możliwe sposoby, które znam, i w końcu odkryłem, że aktualizowana tabela nie ma klucza podstawowego! na szczęście była to kolumna tożsamości.
Później znalazłem programistę, który napisał skrypt do bazy danych do wdrożenia. Dodałem klucz podstawowy i problem został rozwiązany.
Czułem się szczęśliwy i wróciłem do mojego projektu i przeprowadziłem badania, aby znaleźć przyczynę impasu ...
Najwyraźniej impas spowodował okrągły cykl oczekiwania. Aktualizacje najwyraźniej trwają dłużej bez klucza podstawowego niż z kluczem podstawowym.
Wiem, że nie jest to dobrze określony wniosek, dlatego zamieszczam tutaj ...
- Czy brakujący klucz podstawowy stanowi problem?
- Czy istnieją inne warunki, które powodują impas inne niż (wzajemne wykluczenie, wstrzymanie i oczekiwanie, brak uprzedzenia i cykliczne oczekiwanie)?
- Jak zapobiegać i śledzić zakleszczenia?