Isolamento: Livelli Repeatable Read e Serializable
Repeatable Read
Il livello di isolamento Repeatable Read nei database garantisce che, quando si avvia una transazione, si visualizzi un'istantanea del database che rimane immutata per tutta la durata dell'operazione.
Ciò significa che, anche se vengono apportate modifiche al database mentre si sta lavorando, si vedranno solo i dati così come erano all'inizio.
Le transazioni con isolamento Repeatable Read mantengono lock di lettura su tutte le righe a cui fanno riferimento e lock di scrittura sulle righe che inseriscono, aggiornano o eliminano. Questo previene aggiornamenti persi, letture sporche e letture non ripetibili.
Tuttavia, esiste ancora un problema che può verificarsi con questo tipo di isolamento: il phantom read.
Phantom read
Il phantom read può verificarsi quando una transazione sta leggendo dei dati e un'altra transazione aggiunge nuovi record al database. Di conseguenza, è possibile ottenere insiemi di risultati diversi per due letture consecutive della stessa transazione.
Lettura non ripetibile vs phantom read
La lettura non ripetibile si verifica quando la stessa query eseguita dall'Utente A restituisce valori diversi per la stessa riga tra letture consecutive, tipicamente a causa di modifiche effettuate dall'Utente B.
Il phantom read, invece, si verifica quando la stessa query eseguita dall'Utente A restituisce insiemi diversi di righe tra letture consecutive, anche se le singole righe non sono state aggiornate.
Possiamo specificare questo livello di isolamento nella nostra query SQL utilizzando il seguente comando:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Serializable
Il livello di isolamento Serializable rappresenta il massimo grado di isolamento nei database, garantendo la forma più rigorosa di controllo della concorrenza.
A questo livello, le transazioni vengono eseguite come se fossero processate in modo seriale, una dopo l'altra, anche se in realtà possono essere eseguite in parallelo. Questo assicura che il risultato delle transazioni sia lo stesso come se fossero eseguite in un certo ordine seriale, mantenendo la coerenza e prevenendo tutte le anomalie di concorrenza conosciute.
Nota
L'utilizzo di questo tipo di isolamento può comportare una diminuzione delle prestazioni a causa dell'aumento dei blocchi.
Possiamo utilizzare la seguente istruzione per impostare questo livello di isolamento nella nostra query SQL:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
What is the difference between phantom read and non-repeatable read?
Can you give more examples of phantom reads?
How does the Serializable isolation level prevent phantom reads?
Awesome!
Completion rate improved to 4.55
Isolamento: Livelli Repeatable Read e Serializable
Scorri per mostrare il menu
Repeatable Read
Il livello di isolamento Repeatable Read nei database garantisce che, quando si avvia una transazione, si visualizzi un'istantanea del database che rimane immutata per tutta la durata dell'operazione.
Ciò significa che, anche se vengono apportate modifiche al database mentre si sta lavorando, si vedranno solo i dati così come erano all'inizio.
Le transazioni con isolamento Repeatable Read mantengono lock di lettura su tutte le righe a cui fanno riferimento e lock di scrittura sulle righe che inseriscono, aggiornano o eliminano. Questo previene aggiornamenti persi, letture sporche e letture non ripetibili.
Tuttavia, esiste ancora un problema che può verificarsi con questo tipo di isolamento: il phantom read.
Phantom read
Il phantom read può verificarsi quando una transazione sta leggendo dei dati e un'altra transazione aggiunge nuovi record al database. Di conseguenza, è possibile ottenere insiemi di risultati diversi per due letture consecutive della stessa transazione.
Lettura non ripetibile vs phantom read
La lettura non ripetibile si verifica quando la stessa query eseguita dall'Utente A restituisce valori diversi per la stessa riga tra letture consecutive, tipicamente a causa di modifiche effettuate dall'Utente B.
Il phantom read, invece, si verifica quando la stessa query eseguita dall'Utente A restituisce insiemi diversi di righe tra letture consecutive, anche se le singole righe non sono state aggiornate.
Possiamo specificare questo livello di isolamento nella nostra query SQL utilizzando il seguente comando:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Serializable
Il livello di isolamento Serializable rappresenta il massimo grado di isolamento nei database, garantendo la forma più rigorosa di controllo della concorrenza.
A questo livello, le transazioni vengono eseguite come se fossero processate in modo seriale, una dopo l'altra, anche se in realtà possono essere eseguite in parallelo. Questo assicura che il risultato delle transazioni sia lo stesso come se fossero eseguite in un certo ordine seriale, mantenendo la coerenza e prevenendo tutte le anomalie di concorrenza conosciute.
Nota
L'utilizzo di questo tipo di isolamento può comportare una diminuzione delle prestazioni a causa dell'aumento dei blocchi.
Possiamo utilizzare la seguente istruzione per impostare questo livello di isolamento nella nostra query SQL:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
Grazie per i tuoi commenti!