Isolamento: Níveis Repeatable Read e Serializable
Repeatable Read
O nível de isolamento Repeatable Read em bancos de dados garante que, ao iniciar uma transação, você verá um instantâneo do banco de dados que permanece inalterado durante toda a sua tarefa.
Isso significa que, mesmo que outras alterações ocorram no banco de dados enquanto você trabalha, você verá apenas os dados como estavam no início.
Transações sob o isolamento Repeatable Read mantêm locks de leitura em todas as linhas que referenciam e locks de escrita nas linhas que inserem, atualizam ou excluem. Isso previne atualizações perdidas, leituras sujas e leituras não repetíveis.
No entanto, ainda existe um problema que pode ocorrer ao usar esse tipo de isolamento - o phantom read.
Phantom read
O phantom read pode ocorrer quando uma transação está lendo dados e outra transação adiciona novos registros ao banco de dados. Consequentemente, podemos obter conjuntos de resultados diferentes para duas leituras consecutivas.
Non-repeatable read vs phantom read
A leitura não repetível ocorre quando a mesma consulta executada pelo Usuário A retorna valores diferentes para a mesma linha entre leituras consecutivas, normalmente devido a modificações feitas pelo Usuário B.
Já o phantom read ocorre quando a mesma consulta executada pelo Usuário A retorna conjuntos diferentes de linhas entre leituras consecutivas, mesmo que as linhas individuais não tenham sido atualizadas.
Podemos especificar este nível de isolamento em nossa consulta SQL usando o seguinte comando:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Serializable
O nível de isolamento Serializable é o mais alto nível de isolamento em bancos de dados, garantindo a forma mais rigorosa de controle de concorrência.
Neste nível, as transações são executadas como se fossem processadas em série, uma após a outra, mesmo que possam ser executadas concorrentemente. Isso garante que o resultado das transações seja o mesmo como se fossem executadas em alguma ordem serial, mantendo a consistência e evitando todas as anomalias de concorrência conhecidas.
Nota
O uso deste tipo de isolamento pode levar à diminuição de desempenho devido ao aumento de bloqueios.
Podemos usar a seguinte instrução para definir este nível de isolamento em nossa consulta SQL:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
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: Níveis Repeatable Read e Serializable
Deslize para mostrar o menu
Repeatable Read
O nível de isolamento Repeatable Read em bancos de dados garante que, ao iniciar uma transação, você verá um instantâneo do banco de dados que permanece inalterado durante toda a sua tarefa.
Isso significa que, mesmo que outras alterações ocorram no banco de dados enquanto você trabalha, você verá apenas os dados como estavam no início.
Transações sob o isolamento Repeatable Read mantêm locks de leitura em todas as linhas que referenciam e locks de escrita nas linhas que inserem, atualizam ou excluem. Isso previne atualizações perdidas, leituras sujas e leituras não repetíveis.
No entanto, ainda existe um problema que pode ocorrer ao usar esse tipo de isolamento - o phantom read.
Phantom read
O phantom read pode ocorrer quando uma transação está lendo dados e outra transação adiciona novos registros ao banco de dados. Consequentemente, podemos obter conjuntos de resultados diferentes para duas leituras consecutivas.
Non-repeatable read vs phantom read
A leitura não repetível ocorre quando a mesma consulta executada pelo Usuário A retorna valores diferentes para a mesma linha entre leituras consecutivas, normalmente devido a modificações feitas pelo Usuário B.
Já o phantom read ocorre quando a mesma consulta executada pelo Usuário A retorna conjuntos diferentes de linhas entre leituras consecutivas, mesmo que as linhas individuais não tenham sido atualizadas.
Podemos especificar este nível de isolamento em nossa consulta SQL usando o seguinte comando:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Serializable
O nível de isolamento Serializable é o mais alto nível de isolamento em bancos de dados, garantindo a forma mais rigorosa de controle de concorrência.
Neste nível, as transações são executadas como se fossem processadas em série, uma após a outra, mesmo que possam ser executadas concorrentemente. Isso garante que o resultado das transações seja o mesmo como se fossem executadas em alguma ordem serial, mantendo a consistência e evitando todas as anomalias de concorrência conhecidas.
Nota
O uso deste tipo de isolamento pode levar à diminuição de desempenho devido ao aumento de bloqueios.
Podemos usar a seguinte instrução para definir este nível de isolamento em nossa consulta SQL:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
Obrigado pelo seu feedback!