Isolamento: Níveis Repeatable Read e Serializable
Leitura Repetível
O nível de isolamento Leitura Repetível 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 de Leitura Repetível 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, há um problema que ainda 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 em duas leituras consecutivas.
Leitura não repetível 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.
O phantom read, por outro lado, acontece 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 esse 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.
Nesse 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.
Note
O uso desse tipo de isolamento pode levar à diminuição de desempenho devido ao aumento de bloqueios.
Podemos usar a seguinte instrução para definir esse 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
Awesome!
Completion rate improved to 4.35
Isolamento: Níveis Repeatable Read e Serializable
Deslize para mostrar o menu
Leitura Repetível
O nível de isolamento Leitura Repetível 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 de Leitura Repetível 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, há um problema que ainda 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 em duas leituras consecutivas.
Leitura não repetível 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.
O phantom read, por outro lado, acontece 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 esse 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.
Nesse 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.
Note
O uso desse tipo de isolamento pode levar à diminuição de desempenho devido ao aumento de bloqueios.
Podemos usar a seguinte instrução para definir esse nível de isolamento em nossa consulta SQL:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
Obrigado pelo seu feedback!