Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Isolamento: Níveis Repeatable Read e Serializable | Acid
Otimização de SQL e Recursos de Consulta

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

Note
Estude Mais

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.

phantom_read

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;

question-icon

Associe os níveis de isolamento com suas descrições.

Read Uncommitted:
Read Committed:

Repeatable Read:

Serializable:

Click or drag`n`drop items and fill in the blanks

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 7

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Seção 1. Capítulo 7
some-alt