Dela via


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 uppdateringar Table1.Row1, medan Transaction2 uppdateras Table2.Row2
  • Transaction1 försöker uppdatera Table2.Row2 men blockeras eftersom Transaction2 ännu inte har checkat in och inte har släppt sina lås
  • Transaction2 försöker nu uppdatera Table1.Row1 men blockeras eftersom Transaction1 inte har checkat in och inte har släppt sina lås
  • Ett dödläge uppstår eftersom Transaction1 väntar på att Transaction2 ska slutföras, men Transaction2 väntar på att Transaction1 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 (Table1och 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.