Come posso evitare i blocchi di lettura nel mio database?
-
09-06-2019 - |
Domanda
Come posso evitare i blocchi di lettura nel mio database?
Sono benvenute risposte per più database!
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:
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.) .