Bei der Leistung konzentrieren Sie sich weiterhin auf die Auswahl.
Shared blockiert keine Lesevorgänge.
Aktualisierung der freigegebenen Sperrblöcke.
Wenn Sie Hunderte von gemeinsam genutzten Sperren haben, dauert es eine Weile, bis eine exklusive Sperre vorliegt, da gewartet werden muss, bis die freigegebenen Sperren gelöscht sind.
Standardmäßig nimmt eine Auswahl (Lesen) eine gemeinsame Sperre.
Gemeinsame (S) Sperren ermöglichen gleichzeitigen Transaktionen das Lesen (SELECT) einer Ressource.
Eine gemeinsame Sperre, die sich nicht auf andere Auswahlen auswirkt (1 oder 1000).
Der Unterschied besteht darin, wie der Nolock- oder der Shared-Lock-Effekt aktualisiert oder eingefügt werden.
Keine anderen Transaktionen können die Daten ändern, solange gemeinsam genutzte (S) Sperren für die Ressource vorhanden sind.
Eine gemeinsame Sperre blockiert ein Update!
Nolock blockiert jedoch kein Update.
Dies kann enorme Auswirkungen auf die Leistung von Updates haben. Es wirkt sich auch auf Einsätze aus.
Dirty Read (Nolock) klingt einfach schmutzig. Sie werden niemals Teildaten erhalten. Wenn ein Update John in Sally ändert, werden Sie niemals Jolly bekommen.
Ich verwende häufig gemeinsam genutzte Sperren für die Parallelität. Daten sind veraltet, sobald sie gelesen werden. Eine Lektüre von John, die in der nächsten Millisekunde zu Sally wechselt, sind veraltete Daten. Eine Lektüre von Sally, die John in der nächsten Millisekunde zurückgesetzt wird, sind veraltete Daten. Das ist im Millisekundenbereich. Ich habe einen Datenlader, dessen Ausführung 20 Stunden dauert, wenn Benutzer gemeinsam genutzte Sperren verwenden, und dessen Ausführung 4 Stunden dauert, wenn Benutzer keine Sperren verwenden. Gemeinsame Sperren führen in diesem Fall dazu, dass die Daten 16 Stunden veraltet sind.
Verwenden Sie keine falschen Nolocks. Aber sie haben einen Platz. Wenn Sie einen Scheck schneiden möchten, wenn ein Byte auf 1 gesetzt ist, und ihn dann auf 2 setzen, wenn der Scheck geschnitten wird - keine Zeit für einen Nolock.
SELECT
Abfragen) geben, dieWITH (NOLOCK)
ohne Grund verwendet werden könnten?