Først ville jeg gennemgå min SQL 2000-kode og komme til bunds i, hvorfor denne dødvande sker. At rette dette kan skjule et større problem (f.eks. manglende indeks eller dårlig forespørgsel).
For det andet ville jeg gennemgå min arkitektur for at bekræfte, at deadlocking-sætningen virkelig skal kaldes det ofte (Vælger select count(*) from bob
skal ringes op 100 gange i sekundet?).
Men hvis du virkelig har brug for en deadlock-support og ikke har nogen fejl i din SQL eller arkitektur, prøv noget på følgende måde. (Bemærk:Jeg har været nødt til at bruge denne teknik til et system, der understøtter tusindvis af forespørgsler i sekundet og ville ramme dødvande ret sjældent)
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;
}
}