sql >> Databasteknik >  >> RDS >> Sqlserver

Hur får man effektiv Sql Server-deadlock-hantering i C# med ADO?

Först skulle jag granska min SQL 2000-kod och gå till botten med varför detta dödläge inträffar. Att åtgärda detta kan dölja ett större problem (t.ex. saknat index eller dålig fråga).

För det andra skulle jag granska min arkitektur för att bekräfta att dödlåssatsen verkligen måste kallas så ofta (Väljer select count(*) from bob måste ringas 100 gånger i sekunden?).

Men om du verkligen behöver lite dödlägesstöd och inte har några fel i din SQL eller arkitektur, prova något enligt följande. (Obs:Jag har varit tvungen att använda den här tekniken för ett system som stöder tusentals frågor per sekund och skulle hamna i dödläge ganska sällan)

int retryCount = 3;
bool success = false;  
while (retryCount > 0 && !success) 
{
  try
  {
     // your sql here
     success = true; 
  } 
  catch (SqlException exception)
  {
     if (exception.Number != 1205)
     {
       // a sql exception that is not a deadlock 
       throw; 
     }
     // Add delay here if you wish. 
     retryCount--; 
     if (retryCount == 0) throw;
  }
}


  1. IllegalStateException:databas redan stängd (med ViewPager)

  2. Kombinera två kolumner och lägg till en ny kolumn

  3. Vad orsakar Mer känns inte igen... fel när Postgresql 11 körs på en Windows-maskin?

  4. Hur kan jag välja från värdelistan i Oracle