673 Stimmen

Was bedeutet "with (nolock)" in SQL Server?

Kann jemand erklären, welche Auswirkungen die Verwendung von with (nolock) bei Abfragen, wann sollte man sie verwenden und wann nicht?

Wenn Sie z. B. eine Bankanwendung mit hohen Transaktionsraten und vielen Daten in bestimmten Tabellen haben, für welche Arten von Abfragen wäre nolock dann in Ordnung? Gibt es Fälle, in denen man es immer/keinesfalls verwenden sollte?

0 Stimmen

Ich habe eine Unterfrage gestellt in stackoverflow.com/questions/3836282/ y stackoverflow.com/questions/3836032/ meist Jonathan Allens Antwort stackoverflow.com/questions/686724/

1 Stimmen

1 Stimmen

Hier ist eine hervorragende Zusammenfassung der Auswirkungen der Verwendung von NOLOCK blogs.msdn.com/b/davidlean/archive/2009/04/06/

12voto

SoftwareGeek Punkte 14446

Meine 2 Cents - es ist sinnvoll, die WITH (NOLOCK ), wenn Sie Berichte erstellen müssen. Zu diesem Zeitpunkt würden sich die Daten nicht mehr viel ändern und Sie würden diese Datensätze nicht sperren wollen.

9voto

Andrew Hare Punkte 332190

Wenn Sie mit Finanztransaktionen zu tun haben, werden Sie niemals die nolock . nolock wird am besten verwendet, um aus großen Tabellen auszuwählen, die viele Aktualisierungen haben und bei denen es Ihnen egal ist, ob der Datensatz, den Sie erhalten, möglicherweise veraltet ist.

Für Finanzunterlagen (und fast alle anderen Unterlagen in den meisten Anwendungen) nolock würde ein Chaos verursachen, da man möglicherweise Daten aus einem Datensatz zurücklesen könnte, in den gerade geschrieben wurde, und nicht die richtigen Daten erhält.

8voto

Otávio Décio Punkte 72052

Ich habe einen "nächsten Stapel" für zu erledigende Aufgaben abgerufen. In diesem Fall spielt es keine Rolle, um welches Element es sich genau handelt, und ich habe eine Menge Benutzer, die dieselbe Abfrage ausführen.

7voto

Learning Punkte 7731

Verwenden Sie nolock, wenn Sie mit den "schmutzigen" Daten einverstanden sind. Das bedeutet, dass nolock auch Daten lesen kann, die gerade geändert werden und/oder unbestätigte Daten.

Es ist im Allgemeinen keine gute Idee, sie in einer Umgebung mit vielen Transaktionen zu verwenden, und deshalb ist sie auch keine Standardoption bei Abfragen.

7voto

user52212 Punkte 583

Ich verwende den (nolock)-Hinweis insbesondere in SQLServer 2000-Datenbanken mit hoher Aktivität. Ich bin mir jedoch nicht sicher, ob er in SQL Server 2005 erforderlich ist. Vor kurzem habe ich diesen Hint in einem SQL Server 2000 auf Wunsch des DBA des Kunden hinzugefügt, weil er eine Menge SPID-Datensatzsperren bemerkte.

Ich kann nur sagen, dass uns die Verwendung des Hinweises NICHT geschadet hat und dass sich das Problem der Sperrung anscheinend von selbst gelöst hat. Der DBA bei diesem Kunden hat im Grunde darauf bestanden, dass wir den Hint verwenden.

Bei den Datenbanken, mit denen ich zu tun habe, handelt es sich übrigens um Back-Ends für unternehmensweite medizinische Leistungssysteme, d. h. wir sprechen hier von Millionen von Datensätzen und mehr als 20 Tabellen in vielen Joins. In der Regel füge ich für jede Tabelle in der Verknüpfung einen WITH (nolock)-Hinweis hinzu (es sei denn, es handelt sich um eine abgeleitete Tabelle, in diesem Fall können Sie diesen speziellen Hinweis nicht verwenden)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X