Frage

Wie vermeide ich Lesesperren in meiner Datenbank?

Antworten für mehrere Datenbanken willkommen!

War es hilfreich?

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:

http://www.codinghorror.com/blog/archives/001166.html

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.). .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top