Pisanie kodu odpornego na zakleszczenia jest naprawdę trudne. Nawet jeśli uzyskasz dostęp do stołów w tej samej kolejności, nadal możesz natrafić na impas [1]. Na moim blogu napisałem post, który omawia kilka metod, które pomogą Ci uniknąć sytuacji impasu i rozwiązać je.
Jeśli chcesz mieć pewność, że dwie instrukcje/transakcje nigdy nie ulegną zakleszczeniu, możesz to osiągnąć, obserwując, które blokady zużywa każda instrukcja za pomocą sp_lock systemowa procedura składowana. Aby to zrobić, musisz być bardzo szybki lub użyć otwartej transakcji z podpowiedzią blokady.
Uwagi:
- Każda instrukcja SELECT, która wymaga więcej niż jednej blokady naraz, może zablokować inteligentnie zaprojektowaną transakcję, która przechwytuje blokady w odwrotnej kolejności.