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á uma fotografia do banco de dados que permanece inalterada 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 Leitura Repetível mantêm bloqueios de leitura em todas as linhas que referenciam e bloqueios de escrita nas linhas que inserem, atualizam ou excluem. Isso previne atualizações perdidas, leituras sujas e leituras não repetíveis.
No entanto, existe um problema que ainda pode ocorrer ao usar esse tipo de isolamento - leitura fantasma.
Leitura fantasma
Leituras fantasmas ocorrem quando uma transação reexecuta uma consulta e encontra conjuntos diferentes de linhas que satisfazem a condição de filtro original da consulta.
Por exemplo, suponha que uma transação consulte todos os pedidos com valor total superior a $1000. Se outra transação inserir um novo pedido com valor total que atenda a essa condição entre a primeira e a segunda execução da consulta, a primeira transação observará essa linha adicional na segunda execução, resultando em uma leitura fantasma.
A leitura fantasma 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 leitura fantasma
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á a leitura fantasma 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 que se fossem executadas em alguma ordem serial, mantendo a consistência e evitando todas as anomalias de concorrência conhecidas.
Observação
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 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