Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza danych SQL w usłudze Microsoft Fabric
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:
-
Transaction1aktualizujeTable1.Row1, a transaction2 aktualizujeTable2.Row2 -
Transaction1próbuje zaktualizowaćTable2.Row2, ale jest zablokowany, ponieważTransaction2nie została jeszcze zatwierdzona i nie zwolniła blokad - Transakcja2 próbuje teraz zaktualizować
Table1.Row1, ale jest zablokowana, ponieważTransaction1nie została zatwierdzona i nie zwolniła blokad - Zakleszczenie występuje, ponieważ
Transaction1oczekuje na zakończenieTransaction2, aleTransaction2czeka 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.