Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Vermeidung von Deadlocks durch Verwendung des NOLOCK-Hinweises

Gelegentliche Deadlocks auf einem RDBMS, das wie SQL Server/Sybase sperrt, sind zu erwarten.

Sie können auf dem Client codieren, wie empfohlen mein MSDN "Handling Deadlocks" .Untersuchen Sie grundsätzlich die SQLException und versuchen Sie es vielleicht eine halbe Sekunde später erneut.

Andernfalls sollten Sie Ihren Code überprüfen, damit alle Zugriffe auf Tabellen in derselben Reihenfolge erfolgen. Oder Sie können SET DEADLOCK_PRIORITY verwenden, um zu kontrollieren, wer ein Opfer wird.

Auf MSDN für SQL Server gibt es "Minimizing Deadlocks" die beginnt

Dies erwähnt auch "Use a Lower Isolation Level", was ich nicht mag (wie viele SQL-Typen hier auf SO) und ist Ihre Frage. Tu es nicht, ist die Antwort... :-)

Hinweis:MVCC Typ RDBMS (Oracle, Postgres) haben dieses Problem nicht. Siehe http://en.wikipedia.org/wiki/ACID#Locking_vs_multiversioning aber MVCC hat andere Probleme.