Minimizing Deadlocks

Mimo że nie można całkowicie uniknąć zakleszczenie, po niektórych kodowania konwencje można zminimalizować ryzyko wystąpienia generowania zakleszczenie.Minimalizowanie zakleszczenia można zwiększyć przepustowość transakcji i zmniejszyć wykorzystanie systemu, ponieważ mniejsza liczba transakcji:

  • Przywrócenie, cofanie wykonanej przez transakcję.

  • Ponowne przesłanie przez aplikacje, ponieważ zostały one wycofywany po zakleszczony.

Aby zminimalizować zakleszczenia:

  • Obiekty dostępu w tej samej kolejności.

  • Należy unikać interakcji z użytkownikiem w transakcjach.

  • Transakcje na bieżąco krótko i w jednej partia.

  • Użyj na niższy poziom izolacji.

  • Użyj poziom izolacji na przechowywanie wersji wiersza.

    • Ustaw opcję bazy danych READ_COMMITTED_SNAPSHOT ON do włączenia popełnionych odczytu transakcji umożliwia przechowywanie wersji wiersza.

    • Za pomocą izolacji migawka.

  • Za pomocą połączenia związanego.

Obiekty dostępu w tej samej kolejności

Jeśli wszystkie transakcje jednocześnie dostęp do obiektów w tej samej kolejności, zakleszczenia są mniej prawdopodobne.Na przykład, jeśli dwie transakcje równocześnie uzyskać blokada na Dostawcy tabela, a następnie na Część tabela, jedna transakcja jest zablokowany na Dostawcy tabela, aż do zakończenia innych transakcji.Po pierwszej transakcji zatwierdza lub toczy się ponownie, drugi w dalszym ciągu i zakleszczenie, nie występuje.Za pomocą procedur przechowywanych dla wszystkich modyfikacji danych można wykonać standaryzację kolejność dostępu do obiektów.

Diagram showing deadlock avoidance

Należy unikać interakcja z użytkownikiem w transakcji

Aby uniknąć zapisywania transakcje obejmujące interakcji użytkownika, ponieważ szybkość instancji, bez interwencji użytkownika jest znacznie szybsze niż szybkość, z jaką użytkownik musi ręcznie odpowiadać na kwerendy, takie jak odpowiadania na monit z parametrów wymaganych przez aplikację.Na przykład jeśli transakcja jest oczekiwanie na dane wejściowe użytkownika, a użytkownik przechodzi do obiad lub nawet Główny w weekendy, użytkownik opóźnienia transakcji ukończenie.Obniża wydajność systemu, ponieważ wszystkie blokady utrzymywane przez transakcję są wydawane tylko wtedy, gdy transakcja jest przekazana lub wycofana.Nawet wtedy, gdy nie występuje sytuacja zakleszczenie, inne transakcje dostęp do tych samych zasobów są blokowane podczas oczekiwania, aż do zakończenia transakcji.

Zachowaj transakcji krótka i jednej instancji

zakleszczenie zazwyczaj występuje wówczas, gdy kilka transakcji długim jednocześnie wykonywać w tej samej bazy danych.Im dłuższy transakcji dłuższy blokad aktualizacji lub wyłączności są utrzymywane, blokowanie inne działania i prowadzące do sytuacji możliwe zakleszczenie.

Utrzymywanie transakcje w jednej partia minimalizuje sieci żądań krążących powinna zostać zminimalizowana podczas transakcji, zmniejszając możliwych opóźnień w wykonanie transakcji i zwolnienie blokady.

Użyj na niższy poziom izolacji

Określić, czy transakcja mogą być uruchamiane w niższej poziom izolacji.Wykonania odczytać popełnionych umożliwia transakcji odczytać dane uprzednio odczytu (nie zmodyfikowane) przez inną transakcję bez oczekiwania na pierwszej transakcji zakończyć.Za pomocą niższego poziomu izolacji, takich jak Odczyt zatwierdzona, takie jak przechowuje blokad udostępnionych przez czas krótszy niż wyższy poziom izolacji możliwy do serializacji.Zmniejsza to rywalizacji blokowania.

Za pomocą wiersza oparte na wersji poziom izolacji

Gdy opcja READ_COMMITTED_SNAPSHOT bazy danych jest zestaw ON, uruchomione poziom odczytu zadeklarowanej izolacji transakcji używa wersji wiersza, a nie blokad udostępnionego podczas operacji odczytu.

Uwaga

Niektóre aplikacje polegać na blokowanie i zablokowanie zachowania izolacji zadeklarowanej odczytu.Dla tych aplikacji, niektóre konieczne jest wprowadzenie zmiany przed włączeniem tej opcji.

migawka izolacji używa również udostępnione blokady nie jest używany podczas operacji odczytu przechowywania wierszy wersji.Przed transakcji mogą być uruchamiane w izolacji migawka, opcja ALLOW_SNAPSHOT_ISOLATION bazy danych musi być zestaw ON.

Implementuje te poziomy izolacji, aby zminimalizować zakleszczenia, które mogą występować między odczytu i operacje zapisu.

Za pomocą połączenia wiązania

Korzystanie z połączeń związanych, dwóch lub większej liczby połączeń, otwierany przez tą samą aplikacją może współpracować ze sobą.Wszystkie blokady nabytych przez pomocnicze połączenia są utrzymywane tak, jakby pozyskane przez podstawowego połączenia i na odwrót.W związku z tym ich nie należy blokować sobie nawzajem.