Sono previsti deadlock occasionali su un RDBMS che blocca come SQL Server/Sybase.
Puoi codificare sul client per riprovare come consigliato my MSDN "Gestione deadlock" .In pratica, esamina SQLException e forse mezzo secondo dopo, riprova.
In caso contrario, dovresti rivedere il tuo codice in modo che tutti gli accessi alle tabelle siano nello stesso ordine. Oppure puoi usare SET DEADLOCK_PRIORITY per controllare chi diventa una vittima.
Su MSDN per SQL Server è presente "Minimizing Deadlocks" che inizia
Questo menziona anche "Usa un livello di isolamento inferiore" che non mi piace (come molti tipi SQL qui su SO) ed è la tua domanda. Non farlo è la risposta... :-)
- Cosa può succedere come risultato dell'utilizzo di (nolock) su ogni SELECT in SQL Server?
- https://dba.stackexchange.com/q/2684/630
Nota:MVCC tipo RDBMS (Oracle, Postgres) non hanno questo problema. Vedi http://en.wikipedia.org/wiki/ACID#Locking_vs_multiversioning ma MVCC ha altri problemi.