Wie vermeide ich Lesesperren in meiner Datenbank?
-
09-06-2019 - |
Frage
Wie vermeide ich Lesesperren in meiner Datenbank?
Antworten für mehrere Datenbanken willkommen!
Lösung
In Oracle ist der Standardbetriebsmodus der Lesen Sie engagiert Isolationsstufe, bei der eine Select-Anweisung nicht durch eine andere Transaktion blockiert wird, die die von ihr gelesenen Daten ändert.Aus Datenparallelität und -konsistenz:
Bei jeder von einer Transaktion ausgeführten Abfrage werden nur Daten angezeigt, die vor Beginn der Abfrage (nicht der Transaktion) festgeschrieben wurden.Eine Oracle-Abfrage liest niemals schmutzige (nicht festgeschriebene) Daten.
Andere Tipps
In SQL Server können Sie das Schlüsselwort with(nolock) in Ihren Select-Anweisungen verwenden.Zum Beispiel:
Select table1.columna, table2.columna
from table1 with(nolock), table2 with(nolock)
Stellen Sie sicher, dass Sie für jede Tabelle/Ansicht in der Abfrage with(nolock) angeben.
Jeff Atwood hat einen guten Beitrag zu diesem Thema:
In Firebird blockieren Autoren niemals Leser und es gibt keine Dirty Reads.Nur Lese-Commit- und Snapshot-Isolationsstufen.
Es verwendet eine generationsübergreifende Engine (wie Oracle, glaube ich) anstelle einer einfachen Seiten- oder Datensatzsperre.
PostgreSQL verwendet auch MVCC (Multi-Version Concurrency Control). Wenn Sie also die standardmäßige Transaktionsisolationsstufe (read-committed) verwenden, sollten Sie niemals blockieren, es sei denn, jemand führt Wartungsarbeiten an der Datenbank durch (Löschen/Hinzufügen von Spalten/Tabellen/Indizes/usw.). .