💥Você apagou… mas o disco não percebeu: o mito do DELETE no MySQL.

“Apaguei milhões de linhas… mas o tamanho da tabela não mudou.
Isso é bug?”
 
Não.
Isso é MySQL sendo MySQL 😄
Se você já rodou um DELETE pesado esperando liberar espaço em disco… e nada aconteceu, esse post é pra você.
 

🧠 O que a gente espera X o que realmente acontece.

✅ Expectativa…..
“Apaguei metade da tabela, então o arquivo deveria cair pela metade, certo?”

❌ Realidade

  • O dado é removido logicamente
  • Mas o arquivo no disco continua praticamente do mesmo tamanho

Por quê isso acontece?

Porque o InnoDB não trabalha linha a linha no disco, ele trabalha com:

🧱 PÁGINAS (pages) — normalmente de 16KB

Quando você apaga dados:

  • o MySQL marca o espaço como livre dentro da página
  • mas não remove a página do arquivo físico

Em outras palavras:

O espaço continua lá… só que agora “disponível para reutilização”
 

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

Temos as tabelas:

  • sbtest1
  • sbtest2

“Velhas conhecidas… da comunidade”. Então, bora lá.

🔍 Ver o tamanho da tabela antes.

 

🔥 Fazer um DELETE pesado.

Vamos remover uma grande quantidade de linhas:

 

⏱️ Confirmar que deletou.

Vocês deverão notar somente a metade da tabela:
 

😲 Ver o tamanho novamente.

 

💥 Resultado esperado:

  • Número de linhas caiu bastante.
  • Tamanho em MB ≈ continua igual.

🤯 Então o espaço foi embora ou não?

Resposta curta:

👉 Não foi embora.
👉 Mas também não está “perdido”.

 

🔄 O que acontece com esse espaço?

Ele fica:
✅ Dentro da tabela.
✅ Marcado como livre.
✅ Pronto pra ser reutilizado por novos INSERTs.

 

🧪 Teste rápido.

Depois do DELETE realizado:

👉 Vocês irão notar:

  • crescimento menor do que esperado no tamanho da tabela

Porque o MySQL está reutilizando espaço interno.

 

⚠️ Por que isso pode virar problema?

Em ambientes reais:

🚨 Tabelas gigantes continuam ocupando disco.

Mesmo com poucos dados.

🚨 Você acha que liberou espaço… mas não liberou.

Em ambiente com storage caro → dói…

🚨 Pode gerar fragmentação interna.

páginas parcialmente vazias leitura menos eficiente.

 

🧠 Resumo…. e importante guardar.

👉 DELETE no InnoDB NÃO remove espaço físico.

Ele:

  • remove dados logicamente.
  • libera espaço dentro da tabela.
  • mantém o arquivo intacto.

 

🔎 Analogia simples (pra fixar).

Pense numa tabela como se fosse um prédio:

  • DELETE = esvaziar apartamentos
  • Mas o prédio continua lá
  • Pronto pra novos moradores

👉 O problema: o prédio continua ocupando o mesmo terreno.

 

Então:

“Se o MySQL não apaga imediatamente… então onde ficam esses dados antigos?”
 
E mais importante:
“Por que eles continuam existindo por um tempo?”
 

👉 No próximo post, vamos entrar no coração do InnoDB:

“Undo Log e versão de dados — o que realmente acontece quando você dá DELETE”

Confira a parte 2 aqui.

Referências:

MySQL Docs – InnoDB File

MySQL Docs – Optimize Table

MariaDB Docs – Defragmenting InnoDB.

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