Domanda

Come posso evitare i blocchi di lettura nel mio database?

Sono benvenute risposte per più database!

È stato utile?

Soluzione

In Oracle la modalità operativa predefinita è Leggi impegnato livello di isolamento in cui un'istruzione select non viene bloccata da un'altra transazione che modifica i dati che sta leggendo.Da Concorrenza e coerenza dei dati:

Ogni query eseguita da una transazione vede solo i dati che sono stati salvati prima dell'inizio della query (non della transazione).Una query Oracle non legge mai dati sporchi (non impegnati).

Altri suggerimenti

In SQL Server è possibile utilizzare la parola chiave with(nolock) nelle istruzioni select.Per esempio:

Select table1.columna, table2.columna
from table1 with(nolock), table2 with(nolock)

Assicurati di specificare with(nolock) per ogni tabella/vista nella query.

Jeff Atwood ha un buon post su questo argomento:

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

In Firebird gli scrittori non bloccano mai i lettori e non ci sono letture sporche.Solo livelli di isolamento con read commit e snapshot.
Utilizza un motore multigenerazionale (come Oracle, credo) invece del semplice blocco di pagine o record.

PostgreSQL utilizza anche MVCC (Multi-Version Concurrency Control), quindi utilizzando il livello di isolamento della transazione predefinito (read-commit), non dovresti mai bloccare, a meno che qualcuno non stia effettuando manutenzione sul DB (eliminando / aggiungendo colonne / tabelle / indici / ecc.) .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top