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

Warum eine READ UNCOMMITTED-Isolationsstufe verwenden?

Diese Isolationsstufe ermöglicht Dirty Reads. Eine Transaktion kann nicht festgeschriebene Änderungen sehen, die von einer anderen Transaktion vorgenommen wurden.

Um die höchste Isolationsstufe aufrechtzuerhalten, erwirbt ein DBMS normalerweise Sperren für Daten, was zu einem Verlust der Parallelität und einem hohen Overhead für Sperren führen kann. Diese Isolationsstufe lockert diese Eigenschaft.

Vielleicht möchten Sie den Wikipedia-Artikel zu READ UNCOMMITTED lesen für ein paar Beispiele und weiterführende Literatur.

Vielleicht interessieren Sie sich auch für Jeff Atwoods Blog-Artikel darüber, wie er und sein Team ein Deadlock-Problem in den frühen Tagen von Stack Overflow angegangen sind. Laut Jeff:

Aber ist nolock gefährlich? Könnte es passieren, dass Sie mit read uncommitted ungültige Daten lesen An? Ja, theoretisch. Sie werden keinen Mangel an Datenbankarchitektur-Astronauten finden, die anfangen, ACID-Wissenschaft auf Sie fallen zu lassen, aber den Feueralarm des Gebäudes auslösen, wenn Sie ihnen sagen, dass Sie nolock ausprobieren möchten .Es stimmt:Die Theorie ist beängstigend. Aber ich denke mal:"In der Theorie gibt es keinen Unterschied zwischen Theorie und Praxis. In der Praxis schon."

Ich würde niemals empfehlen, nolock zu verwenden als allgemeines "gut für das, was dich plagt"-Snake-Oil-Fix für alle Datenbank-Deadlocking-Probleme, die du möglicherweise hast. Sie sollten zuerst versuchen, die Ursache des Problems zu diagnostizieren.

Aber in der Praxis fügt man nolock hinzu zu Abfragen, von denen Sie absolut wissen, dass es sich um einfache, unkomplizierte schreibgeschützte Angelegenheiten handelt, scheint nie zu Problemen zu führen ... Solange Sie wissen, was Sie tun.

Eine Alternative zum READ UNCOMMITTED Ebene, die Sie vielleicht in Betracht ziehen sollten, ist READ COMMITTED SNAPSHOT . Nochmals Jeff zitieren:

Snapshots basieren auf einer völlig neuen Methode zur Verfolgung von Datenänderungen ... mehr als nur eine geringfügige logische Änderung, es erfordert, dass der Server die Daten physisch anders handhabt. Sobald diese neue Methode zur Nachverfolgung von Datenänderungen aktiviert ist, erstellt sie eine Kopie oder einen Schnappschuss jeder Datenänderung. Durch das Lesen dieser Snapshots anstelle von Live-Daten in Zeiten von Konflikten werden gemeinsame Sperren für Lesevorgänge nicht mehr benötigt, und die Gesamtleistung der Datenbank kann sich erhöhen.