Sollte ich in LINQ-to-SQL NOLOCK, um die Leistung zu verbessern?
-
15-11-2019 - |
Frage
Unsere DBA kam mit Informationen, mit denen unsere Link-Abfragen viele Tausende von Sperren in der Datenbank erstellen. Ein Entwickler in unserem Team gruben diesen Hanselman Post als mögliche Lösung für unser Problem:
http://www.hanselman.com/blog/GETTINGINLINQTOSQLANLINQUTOENTITISTOUSENOLOCK.Aspx < / p>
Scott bietet 3 Wege in LINQ zum Setzen von NOLOCK. 1) TransaktionenKop (bevorzugt), 2) Sprocs, 3) context.executecommand
Wir sind eine Nachrichtenseite, die 99% liest, 1% schreibt, sodass unser Hauptfokus auf der Geschwindigkeit des Abrufs liegt. Ist
Was ich versuche, zu verstehen, ist
ist noock wirklich die beste Option für die vielen schnellen Reads, wenige Updates-Site?
update: In SQL Server 2005 und höher ist die Snapshot-Isolation besser als NOLOUCK? Ich habe das gerade gefunden http://msdn.microsoft.com/de-us/library/ms179599.aspx
das deckt liebste Snapshot ab. Dies verhindert den Schreibblock, gibt jedoch keine schmutzigen Daten zurück? Sollte dies 90% der Zeit über dem NOLOCK verwendet werden?
update 2: Was mich stört, ist trocken
Der Teil, der mich am meisten stört, ist, dass ich, um entweder ein No-Lock- oder Snapshot-Muster zu implementieren, ihn auf jeder LINQ-to-SQL-Abfragemethode ändern muss (außer den in Aktualisierungen verwendet werden). Dies riecht nach einem großen Verletzung trockener Verletzung.
Lösung
Worth noting: READ COMMITTED SNAPSHOT
is (or at least was 2+ years ago) good enough for the site you're using.