sql >> Database >  >> RDS >> Sqlserver

Hoe krijg ik een efficiënte Sql Server-deadlock-afhandeling in C# met ADO?

Eerst zou ik mijn SQL 2000-code herzien en tot op de bodem uitzoeken waarom deze impasse zich voordoet. Als u dit oplost, verbergt u mogelijk een groter probleem (bijv. ontbrekende index of slechte zoekopdracht).

Ten tweede zou ik mijn architectuur herzien om te bevestigen dat de deadlocking-statement echt zo vaak moet worden aangeroepen (Does select count(*) from bob 100 keer per seconde gebeld moeten worden?).

Als je echter echt wat deadlock-ondersteuning nodig hebt en geen fouten in je SQL of architectuur hebt, probeer dan iets in de trant van de volgende regels. (Opmerking:ik heb deze techniek moeten gebruiken voor een systeem dat duizenden zoekopdrachten per seconde ondersteunt en ik zou maar zelden in een impasse raken)

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. MariaDB (Master-Slave)-replicatie instellen in CentOS/RHEL 7 en Debian 8/9

  2. Hoe kan ik een alias geven aan een tabel in Oracle?

  3. MySQL IF()-functie uitgelegd

  4. Uitvoerparameters voor opgeslagen procedures gebruiken in C#