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
aktualizujeTable1.Row1
, a transaction2 aktualizujeTable2.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ńczenieTransaction2
, aleTransaction2
czeka na zakończenieTransaction1
.
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.