8.2. Lost update, write skew e serializabilidade
Ler-modificar-escrever concorrente perde dados; só serializabilidade elimina write skew e fantasmas.
Resumo
- Lost update: dois ler-modificar-escrever simultâneos; um some. Soluções: operação atômica,
SELECT FOR UPDATE, compare-and-set. - Write skew: duas transações leem a mesma condição e escrevem objetos diferentes, quebrando a regra (plantão sem médico).
- Fantasma: uma escrita muda o resultado de uma busca feita por outra transação. Lock na linha não protege o que não existe.
- Serializável: resultado igual a alguma execução em série. Formas: execução serial real (VoltDB, Redis), 2PL, SSI.
- 2PL: leitores bloqueiam escritores e vice-versa; lento e com deadlocks. SSI: otimista, aborta quem leu dado desatualizado.
Perguntas-chave
responda de cabeça, depois abraPor que snapshot isolation não impede write skew?
Cada transação lê seu próprio retrato e escreve linhas diferentes; não há conflito de escrita na mesma linha para o banco detectar.
Qual a diferença entre 2PL e SSI?
2PL é pessimista: bloqueia na leitura e espera. SSI é otimista: deixa executar e, no commit, aborta transações cuja leitura ficou desatualizada.
Quando execução serial real é viável?
Quando cada transação é curta, os dados cabem em memória e a vazão de escrita cabe num único núcleo de CPU (ou em shards independentes).
Exercícios de fixação
0/5 respondidas1.
Dois usuários incrementam um contador lendo
valor, somando 1 e gravando. O contador sobe só 1. Qual a correção mais simples?2.
Regra: ao menos um médico de plantão. Alice e Bob, os dois de plantão, pedem saída ao mesmo tempo e ambos conseguem. Que anomalia é?
3.
Um sistema de reservas checa se a sala está livre e insere a reserva. Duas reservas iguais entram. Por que
SELECT FOR UPDATE não resolve?4.
Qual é a principal desvantagem do two-phase locking (2PL)?
5.
SSI (serializable snapshot isolation) é considerado otimista porque: