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:
- 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).
- Read Committed (Leitura confirmada): A transação só pode ler dados que foram confirmados por outras transações. Evita a "leitura suja".
- 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".
- 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.