Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Evitare il deadlock utilizzando il suggerimento NOLOCK

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... :-)

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.