Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Éviter l'impasse en utilisant l'indice NOLOCK

Des blocages occasionnels sur un SGBDR qui se verrouille comme SQL Server/Sybase sont attendus.

Vous pouvez coder sur le client pour réessayer comme recommandé mon MSDN "Handling Deadlocks" . Fondamentalement, examinez l'exception SQLException et peut-être une demi-seconde plus tard, réessayez.

Sinon, vous devriez revoir votre code afin que tous les accès aux tables soient dans le même ordre. Ou vous pouvez utiliser SET DEADLOCK_PRIORITY pour contrôler qui devient une victime.

Sur MSDN pour SQL Server, il existe "Minimizing Deadlocks" qui commence

Cela mentionne également "Utiliser un niveau d'isolement inférieur" que je n'aime pas (comme de nombreux types SQL ici sur SO) et c'est votre question. Ne le faites pas est la réponse... :-)

Remarque :MVCC type RDBMS (Oracle, Postgres) n'ont pas ce problème. Voir http://en.wikipedia.org/wiki/ACID#Locking_vs_multiversioning mais MVCC a d'autres problèmes.