Udostępnij za pośrednictwem


MSSQLSERVER_1205

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Szczegóły

Atrybut Wartość
Nazwa produktu SQL Server
Identyfikator zdarzenia 1205
Źródło zdarzeń MSSQLSERVER
Składnik SQLEngine
Nazwa symboliczna LK_VICTIM
Tekst wiadomości Transakcja (identyfikator procesu %d) została zakleszona na %.*ls zasobów z innym procesem i została wybrana jako ofiara zakleszczenia. Uruchom ponownie transakcję.

Wyjaśnienie

Dostęp do zasobów jest uzyskiwany w kolejności powodującej konflikt dla oddzielnych transakcji, co powoduje zakleszczenie . Na przykład:

  • Transaction1 aktualizuje Table1.Row1, a transaction2 aktualizuje Table2.Row2
  • Transaction1 próbuje zaktualizować Table2.Row2, ale jest zablokowany, ponieważ Transaction2 nie została jeszcze zatwierdzona i nie zwolniła blokad
  • Transakcja2 próbuje teraz zaktualizować Table1.Row1, ale jest zablokowana, ponieważ Transaction1 nie została zatwierdzona i nie zwolniła blokad
  • Zakleszczenie występuje, ponieważ Transaction1 oczekuje na zakończenie Transaction2, ale Transaction2 czeka na zakończenie Transaction1.

System wykrywa ten impas i wybiera jedną z transakcji związanych z ofiarą. Następnie powoduje wyświetlenie tego komunikatu o błędzie, cofnie transakcję ofiary. Aby uzyskać szczegółowe informacje, zobacz Zakleszczenia.

Akcja użytkownika

Zakleszczenia są w większości przypadków związane z aplikacjami i wymagają od deweloperów aplikacji wprowadzenia zmian w kodzie. Jednym z podejść po wystąpieniu błędu 1205 jest ponowne wykonanie zapytań. Aby uzyskać więcej informacji, zobacz aplikacja symulatora zakleszczenia dla deweloperów: Jak obsługiwać problem z zakleszczeniem SQL w aplikacji.

Możesz również skorygować aplikację, aby uniknąć zakleszczenia. Transakcja wybrana jako ofiara może zostać ponowiona i prawdopodobnie powiedzie się, w zależności od tego, jakie operacje są wykonywane jednocześnie.

Aby zapobiec występowaniu zakleszczeń lub uniknąć ich występowania, rozważ uzyskanie dostępu do wszystkich transakcji w tej samej kolejności (Table1, a następnie Table2). W ten sposób, mimo że blokowanie może wystąpić, unika się zakleszczenia.

Aby uzyskać więcej informacji, zobacz Handling Deadlocks i Minimaling Deadlocks.