MSSQLSERVER_1205
gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance
Detaljer
Attribut | Värde |
---|---|
Produktnamn | SQL Server |
Händelse-ID | 1205 |
Händelsekälla | MSSQLSERVER |
Komponent | SQLEngine |
Symboliskt namn | LK_VICTIM |
Meddelandetext | Transaktion (process-ID %d) har låsts på %.*ls-resurser med en annan process och har valts som dödlägesoffer. Kör transaktionen igen. |
Förklaring
Resurser används i konfliktordning för separata transaktioner, vilket orsakar ett dödläge. Till exempel:
-
Transaction1
uppdateringarTable1.Row1
, medan Transaction2 uppdaterasTable2.Row2
-
Transaction1
försöker uppdateraTable2.Row2
men blockeras eftersomTransaction2
ännu inte har checkat in och inte har släppt sina lås - Transaction2 försöker nu uppdatera
Table1.Row1
men blockeras eftersomTransaction1
inte har checkat in och inte har släppt sina lås - Ett dödläge uppstår eftersom
Transaction1
väntar på attTransaction2
ska slutföras, menTransaction2
väntar på attTransaction1
ska slutföras.
Systemet identifierar det här dödläget och väljer en av de transaktioner som ingår som en offer. Det utfärdar sedan det här felmeddelandet och återställer offrets transaktion. Detaljerad information finns i Deadlocks.
Användaråtgärd
Dödlägen är i de flesta fall programrelaterade problem och kräver att programutvecklare gör kodändringar. En metod när du får fel 1205 är att köra frågorna igen. Mer information finns i Deadlock Simulator app for Developers: How to Handle a SQL Deadlock issue in Your App.
Du kan också ändra programmet för att undvika dödlägen. Den transaktion som valdes som offer kan göras om och lyckas sannolikt, beroende på vilka åtgärder som körs samtidigt.
Om du vill förhindra eller undvika att dödlägen inträffar bör du överväga att ha alla transaktioner som har åtkomst till rader i samma ordning (Table1
och sedan Table2
). På så sätt undviks ett dödläge, även om blockering kan uppstå.
Mer information finns i Hantera dödlägen och Minimera dödlägen.