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