sql >> Database >  >> RDS >> Sqlserver

Een impasse vermijden door de NOLOCK-hint te gebruiken

Er worden af ​​en toe impasses verwacht op een RDBMS die vergrendelt zoals SQL Server/Sybase.

U kunt coderen op de client om het opnieuw te proberen, zoals aanbevolen mijn MSDN "Omgaan met deadlocks" .Kijk in principe naar de SQLException en probeer het misschien een halve seconde later opnieuw.

Anders moet u uw code controleren zodat alle toegang tot tabellen in dezelfde volgorde staat. Of je kunt SET DEADLOCK_PRIORITY gebruiken om te bepalen wie het slachtoffer wordt.

Op MSDN voor SQL Server is er "Het minimaliseren van deadlocks" die begint

Dit vermeldt ook "Gebruik een lager isolatieniveau", wat ik niet leuk vind (hetzelfde als veel SQL-typen hier op SO) en is uw vraag. Niet doen is het antwoord... :-)

Opmerking:MVCC type RDBMS (Oracle, Postgres) hebben dit probleem niet. Zie http://en.wikipedia.org/wiki/ACID#Locking_vs_multiversioning maar MVCC heeft andere problemen.



  1. virtualenv, mysql-python, pip:weet iemand hoe?

  2. Kan Count(*) ooit null retourneren?

  3. De uitvoering van een instructie in PostgreSQL pauzeren

  4. Hoe maak je een SQL-lusquery om het verschil tussen waarden te controleren?