🔥 O que realmente acontece quando você dá DELETE: MVCC, Undo Log e versão de dados

“Se o DELETE não apaga de verdade… então o que exatamente ele faz?”

No post anterior, vimos que:

👉 você apaga dados
👉 mas o espaço não some

Agora vem a resposta completa:

💥 Porque o dado não é apagado imediatamente.

E isso tem nome:

🧠 MVCC (Multi-Version Concurrency Control)

 

🧩 1. O segredo do InnoDB: múltiplas versões do mesmo dado

O InnoDB funciona assim:

👉 Ele mantém versões antigas das linhas
👉 Para garantir consistência entre transações

Ou seja:

✅ Seu DELETE não “remove” a linha na hora
✅ Ele cria uma nova versão da linha (marcada como deletada).

Por baixo dos panos.

Quando você roda:

O InnoDB faz algo equivalente a:

  • marca a linha como deletada
  • mantém a versão antiga
  • guarda informações no Undo Log

💡 Isso não é teoria — é comportamento documentado (MySQL Docs):

O DELETE é tratado internamente como uma atualização que marca a linha como removida, mantendo versões anteriores para leitura consistente.

 

🧪 Demonstração prática (com sysbench)

Vamos ver isso acontecendo na prática.

🔍 1) Criar uma transação longa (Sessão 1)

👉 Essa sessão agora tem um “snapshot” dos dados.

🔥 2) Em outra sessão, fazer DELETE

😲 3) Voltamos na Sessão 1.

 
👉 A linha ainda aparece 😳

🤯 O que aconteceu aqui?

Isso é o MVCC em ação:

✅ Sessão 1 vê a versão antiga
✅ Sessão 2 já deletou o dado
✅ As duas leituras coexistem

 

🧠 Por que o MySQL faz isso?

Para garantir:

  • consistência
  • isolamento entre transações
  • leitura sem lock

👉 Basicamente: ACID funcionando de verdade…..

 

📦 2. Onde essas versões antigas ficam?

Agora entra o protagonista:

💥 UNDO LOG

O que é o Undo Log?

É onde o InnoDB guarda:

  • versões antigas de linhas
  • dados para rollback
  • informações pra reconstruir versões antigas

👉 Ele fica em estruturas chamadas:

  • rollback segments
  • undo tablespaces
Quando realizamos:

O MySQL guarda:

  • os dados antigos.
  • referência à versão anterior.
  • informações da transação.

Observação importante:

O dado “apagado” ainda existe — só não está mais visível para novas transações.
 

Fluxo simplicado de um Delete.

 

⚠️ 4. O problema das versões antigas.

Agora vem a parte prática de produção:

🚨 Se você tiver:

  • transações abertas por muito tempo
  • relatórios rodando
  • sessões esquecidas

👉 o MySQL NÃO pode apagar versões antigas.

Resultado:
  • Undo log cresce
  • espaço continua ocupado
  • pode afetar performance

 

💣 Exemplo comum

  • aplicação abre transação
  • esquece de dar COMMIT
  • DELETE roda normalmente
  • mas limpeza nunca acontece

👉 cenário clássico de banco “inchando”.

 

Agora vem a pergunta que fecha o raciocínio:

“Quem limpa essas versões antigas?”

E mais:

“Por que às vezes isso demora ou trava?”

 

👉 No próximo post:

💥 Purge Thread: o ‘faxineiro’ do InnoDB que ninguém lembra.

 

Referências.

MySQL Docs – MVCC

MySQL Docs -> Undo Logs

MySQL Docs – Consistent NonLocking

COMPARTILHE:
Picture of Henrique Borba Garcia

Henrique Borba Garcia

Iniciei meus estudos na área de Desenvolvimento no ano de 2021. Atualmente, em MySQL tenho uma experiência de 5 anos, e com bancos não relacionais (MongoDB) 2 anos. Desempenho o papel de LÍDER TÉCNICO para ambas as técnologias. Sou bastante persistente e proativo em diversos assuntos em banco de dados. Minhas certificações. . MySQL 2025 Solution Enginner Specialist Assessment. . MySQL Database Administrator 8.0 . MySQL Database Developer 8.0 . OCI Foundations 2021, 2022, 2023, e 2024. . MySQL Database Service . MySQL Explorer. . SQL Explorer. . Oracle Cloud Data Management 2023
Picture of Henrique Borba Garcia

Henrique Borba Garcia

Iniciei meus estudos na área de Desenvolvimento no ano de 2021. Atualmente, em MySQL tenho uma experiência de 5 anos, e com bancos não relacionais (MongoDB) 2 anos. Desempenho o papel de LÍDER TÉCNICO para ambas as técnologias. Sou bastante persistente e proativo em diversos assuntos em banco de dados. Minhas certificações. . MySQL 2025 Solution Enginner Specialist Assessment. . MySQL Database Administrator 8.0 . MySQL Database Developer 8.0 . OCI Foundations 2021, 2022, 2023, e 2024. . MySQL Database Service . MySQL Explorer. . SQL Explorer. . Oracle Cloud Data Management 2023

PARTICIPE

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

POSTADO POR
Picture of Henrique Borba Garcia

Henrique Borba Garcia

Iniciei meus estudos na área de Desenvolvimento no ano de 2021. Atualmente, em MySQL tenho uma experiência de 5 anos, e com bancos não relacionais (MongoDB) 2 anos. Desempenho o papel de LÍDER TÉCNICO para ambas as técnologias. Sou bastante persistente e proativo em diversos assuntos em banco de dados. Minhas certificações. . MySQL 2025 Solution Enginner Specialist Assessment. . MySQL Database Administrator 8.0 . MySQL Database Developer 8.0 . OCI Foundations 2021, 2022, 2023, e 2024. . MySQL Database Service . MySQL Explorer. . SQL Explorer. . Oracle Cloud Data Management 2023
PARCEIROS