Ich bin mir nicht sicher, warum Sie Finanztransaktionen nicht in Datenbanktransaktionen verpacken (wenn Sie Geld von einem Konto auf ein anderes überweisen, geben Sie nicht jeweils nur eine Seite der Transaktion frei - deshalb gibt es ja explizite Transaktionen). Selbst wenn Ihr Code keine Ahnung von Geschäftstransaktionen hat, wie es sich anhört, haben alle transaktionalen Datenbanken die Möglichkeit, im Falle von Fehlern oder Ausfällen implizite Rollbacks durchzuführen. Ich glaube, diese Diskussion geht weit über Ihren Horizont hinaus.
Wenn Sie Probleme mit dem Sperren haben, sollten Sie eine Versionsverwaltung einführen und Ihren Code bereinigen.
Keine Sperre liefert nicht nur falsche Werte, sondern auch Phantomsätze und Duplikate.
Es ist ein weit verbreiteter Irrglaube, dass Abfragen dadurch immer schneller laufen. Wenn es keine Schreibsperren auf einer Tabelle gibt, macht es keinen Unterschied. Wenn es Sperren auf der Tabelle gibt, kann es die Abfrage schneller machen, aber es gibt einen Grund, warum Sperren überhaupt erst erfunden wurden.
Der Fairness halber seien hier zwei spezielle Szenarien genannt, in denen ein nolock-Hinweis von Nutzen sein kann
1) Sql-Server-Datenbank aus der Zeit vor 2005, die eine lange Abfrage gegen eine Live-OLTP-Datenbank ausführen muss - dies ist möglicherweise die einzige Möglichkeit
2) Schlecht geschriebene Anwendung, die Datensätze sperrt und die Kontrolle an die Benutzeroberfläche zurückgibt, und Leser werden auf unbestimmte Zeit blockiert. Nolock kann hier hilfreich sein, wenn die Anwendung nicht repariert werden kann (Drittanbieter usw.) und die Datenbank entweder vor 2005 ist oder die Versionierung nicht aktiviert werden kann.
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
Ein Link hier - mssqltips.com/sqlservertip/2470/
1 Stimmen
Hier ist eine hervorragende Zusammenfassung der Auswirkungen der Verwendung von NOLOCK blogs.msdn.com/b/davidlean/archive/2009/04/06/