Questão de Banco de Dados — Transações (Locks, ACID, etc.) — CESPE / CEBRASPE 2025
Banco de Dados›Transações (Locks, ACID, etc.)
Código
ce417229
Banca
CESPE / CEBRASPE
Órgão
PC DF
Ano
2025
Cargo
GAAPC ( )
A respeito de arquitetura, segurança, integridade, concorrência, recuperação após falhas e gerenciamento de transições em sistemas de gerenciamento de banco de dados (SGDB), julgue o item a seguir.
Em ambientes com alta latência ou alto número de falhas, recomenda-se como primeira opção a utilização do protocolo 2PC (Two-Phase Commit), dada a sua eficiência em situações dessa natureza.
CCerto
EErrado
Revelar gabarito e comentário▾
GabaritoE — Errado
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Protocolo 2PC (Two-Phase Commit) em Ambientes de Alta Latência e Falhas
Gabarito: Errado. O protocolo 2PC (Two-Phase Commit) é um mecanismo de coordenação de transações distribuídas que garante atomicidade, mas é ineficiente em ambientes de alta latência ou com alto número de falhas, pois é um protocolo bloqueante que exige múltiplas mensagens de ida e volta entre o coordenador e os participantes, e em caso de falha do coordenador, os participantes podem ficar bloqueados indefinidamente. Para esses cenários, recomenda-se como primeira opção protocolos mais modernos e não bloqueantes, como o 3PC (Three-Phase Commit) ou, principalmente, o TCC (Try-Confirm/Cancel) e o Saga, que são mais adequados para alta latência e tolerância a falhas.
O 2PC é um protocolo clássico de commit atômico distribuído. Ele funciona em duas fases: na primeira (fase de preparação), o coordenador envia uma mensagem de "prepare" a todos os participantes, que executam as operações da transação e respondem com "sim" (pronto para commit) ou "não" (abortar). Na segunda fase (fase de decisão), se todos responderem "sim", o coordenador envia "commit" para todos; se qualquer um responder "não" ou não responder, o coordenador envia "abort" para todos. Esse protocolo garante a atomicidade, mas tem uma fraqueza fundamental: é um protocolo bloqueante. Se o coordenador falhar após a fase de preparação, os participantes que responderam "sim" ficam em um estado incerto, sem saber se devem commitar ou abortar, e podem ficar bloqueados indefinidamente, segurando recursos (locks) e degradando o desempenho do sistema.
Em ambientes de alta latência, o 2PC é particularmente problemático porque cada fase exige uma rodada de mensagens entre o coordenador e todos os participantes. Com alta latência, o tempo de espera por cada resposta aumenta, tornando o protocolo lento. Além disso, em cenários com alto número de falhas, a probabilidade de o coordenador ou algum participante falhar é maior, e o 2PC não lida bem com isso, pois é bloqueante. Por isso, para esses cenários, a recomendação é usar protocolos não bloqueantes ou baseados em compensação, como o Saga (que divide a transação em etapas com compensações) ou o TCC (Try-Confirm/Cancel), que são mais tolerantes a falhas e não exigem bloqueio prolongado de recursos.
A pegadinha da questão está em inverter a recomendação: o 2PC é adequado para ambientes de baixa latência e baixa taxa de falhas, onde a coordenação é rápida e a probabilidade de falha é pequena. Em ambientes adversos, ele é justamente a pior escolha, pois sua natureza bloqueante e a necessidade de múltiplas mensagens o tornam ineficiente. O candidato que conhece o 2PC apenas como "protocolo de commit distribuído" pode ser induzido a marcar "Certo", mas a banca explora exatamente essa confusão.
NÃO CAIA NESSA!
A banca troca o cenário de aplicação do 2PC. Ela afirma que ele é eficiente em alta latência e alto número de falhas, quando na verdade é o oposto: o 2PC é recomendado para ambientes de baixa latência e baixa taxa de falhas. Em cenários adversos, protocolos como Saga e TCC são mais adequados. Fique atento a essa inversão clássica.
Protocolos de commit distribuído
12PC (Two-Phase Commit)
Fases: prepare → commit/abort
Bloqueante (falha do coordenador trava participantes)
Adequado: baixa latência, baixa taxa de falhas
2Alternativas para alta latência/falhas
3PC (não bloqueante)
TCC (Try-Confirm/Cancel)
Saga (compensação)
LEVEL · soulevel.com.br
Alternativa E — ✅ Correta ⟵ GABARITO
A afirmação está correta ao dizer que o item é Errado. O 2PC não é eficiente em ambientes de alta latência ou alto número de falhas; pelo contrário, é um protocolo bloqueante que sofre nesses cenários. A recomendação para tais ambientes é usar protocolos não bloqueantes ou baseados em compensação, como Saga e TCC. Portanto, a assertiva do enunciado está incorreta, e a alternativa E é a resposta certa.