Sobes.tech
Middle

Quais são os tipos de isolamento de transações?

sobes.tech IA

Resposta da IA

O isolamento de transações determina até que ponto uma transação pode ver as alterações intermédias de outras transações que estão a ser executadas em paralelo.

O padrão SQL define quatro níveis de isolamento:

  1. Read Uncommitted (Leitura não confirmada): O nível mais baixo. A transação pode ler alterações não confirmadas de outras transações (leitura suja).
  2. Read Committed (Leitura confirmada): A transação só pode ler dados que foram confirmados por outras transações. Evita a "leitura suja".
  3. Repeatable Read (Leitura repetível): A transação garante que os dados lidos durante a transação não irão mudar em leituras subsequentes. Evita a "leitura suja" e a "leitura não repetível". Podem ocorrer "fantasmas".
  4. Serializable (Serializável): O nível mais alto de isolamento. Garante que as transações paralelas são executadas como se fossem sequenciais. Evita todos os fenómenos indesejados: "leitura suja", "leitura não repetível" e "fantasmas".

Fenómenos indesejados na execução paralela de transações:

  • Dirty Read (Leitura suja): A transação A lê dados modificados pela transação B que ainda não foram confirmados. Se a transação B reverter as alterações, a transação A trabalhará com dados incorretos.
  • Non-repeatable Read (Leitura não repetível): A transação A lê os mesmos dados duas vezes, mas entre as leituras, a transação B confirma uma alteração nesses dados. Como resultado, a transação A obtém valores diferentes em leituras subsequentes.
  • Phantom Read (Leitura de fantasmas): A transação A executa uma consulta que devolve um conjunto de linhas. A transação B confirma a inserção ou eliminação de linhas que correspondem aos critérios da consulta A. Ao reexecutar a mesma consulta, a transação A obtém um conjunto diferente de linhas.

Tabela resumo dos fenómenos indesejados por níveis de isolamento:

Nível de isolamento Leitura suja Leitura não repetível Fantasmas
Read Uncommitted Sim Sim Sim
Read Committed Não Sim Sim
Repeatable Read Não Não Sim
Serializable Não Não Não

A escolha do nível de isolamento influencia o desempenho e a correção do funcionamento da aplicação. Quanto mais alto for o nível de isolamento, maiores serão os custos adicionais.