DataSunrise Consegue la Certificazione AWS DevOps Competency per AWS DevSecOps e Monitoraggio, Logging e Performance

Transaction Isolation Levels-01

Livelli di Isolamento delle Transazioni

Il livello di isolamento delle transazioni è inteso come uno stato all’interno dei database che specifica la quantità di dati visibili a una dichiarazione in una transazione, specialmente quando gli stessi dati sono acceduti da molte transazioni contemporaneamente. Immaginiamo una situazione in cui abbiamo una tabella Clienti di 1 milione di righe che occupa 10 GB di spazio su disco. Alle 9 abbiamo avviato una query “SELECT * FROM Customers”, che interroga tutte le righe della tabella. Nel nostro caso, questa query impiega circa 5 minuti per completarsi. Questo tempo è necessario per scansionare completamente la nostra tabella fino alla fine e recuperare le righe. Questo tipo di query esegue una scansione completa della tabella e non può essere raccomandata dal punto di vista delle prestazioni. Alle 9:01 UserB aggiorna l’ultima riga nella tabella Clienti e conferma la modifica. Poco dopo la nostra query arriva all’ultima riga modificata da UserB. Quindi cosa succederà? Vedremo il valore originale della riga o il valore modificato della riga? Il nuovo valore della riga è legittimo e confermato, ma è stato aggiornato dopo l’inizio della nostra query.

Il risultato della nostra query dipende dal livello di isolamento della transazione. In sostanza, ci sono 4 livelli di isolamento spiegati di seguito:

  1. Read uncommitted. Vedremo le modifiche effettuate da UserB. Questo livello di isolamento è anche chiamato “dirty reads” che significa che i dati letti non sono coerenti con altre parti della tabella o della query e potrebbero non essere ancora stati confermati. I “dirty reads” assicurano le prestazioni più rapide, poiché i dati vengono letti direttamente dai blocchi di tabella senza validazione.
  2. Read committed. Non vedremo le modifiche effettuate da UserB. Questo accade perché con questo livello di isolamento della query le righe recuperate da una query sono le righe che erano state confermate prima dell’inizio della query. Significa che le modifiche effettuate da UserB non erano presenti quando la query è iniziata, quindi le modifiche non saranno incluse nel risultato della query.
  3. Repeatable read. Non vedremo le modifiche effettuate da UserB. Questo accade a causa del fatto che nel livello di isolamento repeatable read, le righe recuperate da una query sono le righe che erano state confermate quando la transazione è iniziata. Significa che le modifiche effettuate da UserB non erano presenti quando la transazione è iniziata e quindi non saranno incluse nel risultato della query. “Tutte le letture coerenti all’interno della stessa transazione leggono lo snapshot stabilito dalla prima lettura” (dalla documentazione MySQL)
  4. Serializable. Questo livello di isolamento significa che tutte le transazioni del database avvengono in modo completamente isolato. In questo livello di isolamento tutte le transazioni vengono eseguite in serie, una dopo l’altra. Il DBMS può eseguire due o più transazioni contemporaneamente solo se può essere mantenuta l’illusione dell’esecuzione in serie. In pratica, il serializable è molto simile al repeatable read ma utilizza una diversa tecnica di implementazione per ciascun motore di database. Ad esempio, in Oracle, il livello di isolamento repeatable read non è supportato e serializable fornisce il livello di isolamento più alto. Questo livello di isolamento è come repeatable read, ma InnoDB converte implicitamente tutte le istruzioni SELECT in “SELECT … LOCK IN SHARE MODE”.

Successivo

DataSunrise, Inc. Raggiunge la Designazione Amazon Redshift Ready, Lanciando il Partner a re:Invent

DataSunrise, Inc. Raggiunge la Designazione Amazon Redshift Ready, Lanciando il Partner a re:Invent

Scopri di più

Ha bisogno del nostro team di supporto?

I nostri esperti saranno lieti di rispondere alle Sue domande.

Informazioni generali:
[email protected]
Servizio clienti e supporto tecnico:
support.datasunrise.com
Richieste di collaborazione e alleanza:
[email protected]