Innanzitutto, rivedrei il mio codice SQL 2000 e andrei in fondo al motivo per cui si sta verificando questo deadlock. Risolvere questo problema potrebbe nascondere un problema più grande (ad es. indice mancante o query errata).
In secondo luogo, esaminerei la mia architettura per confermare che l'istruzione deadlocking deve davvero essere chiamata così frequentemente (select count(*) from bob
bisogna chiamare 100 volte al secondo?).
Tuttavia, se hai davvero bisogno di un supporto per deadlock e non hai errori nel tuo SQL o architettura, prova qualcosa lungo le seguenti linee. (Nota:ho dovuto usare questa tecnica per un sistema che supporta migliaia di query al secondo e raggiungeva i deadlock abbastanza raramente)
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;
}
}