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;
}
}