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 uno snapshot del database che rimane invariato per tutta la durata dell'operazione.
Ciò significa che, anche se vengono apportate altre 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: la lettura fantasma.
Lettura fantasma
La lettura fantasma 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 lettura fantasma
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 apportate dall'Utente B.
La lettura fantasma, 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 è il livello più alto 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ò portare a 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
Awesome!
Completion rate improved to 4.35
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 uno snapshot del database che rimane invariato per tutta la durata dell'operazione.
Ciò significa che, anche se vengono apportate altre 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: la lettura fantasma.
Lettura fantasma
La lettura fantasma 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 lettura fantasma
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 apportate dall'Utente B.
La lettura fantasma, 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 è il livello più alto 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ò portare a 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!