Isso é bug?”
Isso é MySQL sendo MySQL 😄
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.
|
1 |
DELETE FROM sbtest1 WHERE id <= 500000; |
❌ 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:
🧪 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.
|
1 2 3 4 5 6 7 |
SELECT table_name, round(data_length/1024/1024,2) AS data_mb, round(index_length/1024/1024,2) AS index_mb FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = 'sbtest1'; |
🔥 Fazer um DELETE pesado.
Vamos remover uma grande quantidade de linhas:
|
1 |
DELETE FROM sbtest1 WHERE id <= 500000; |
⏱️ Confirmar que deletou.
|
1 |
SELECT COUNT(*) FROM sbtest1; |

😲 Ver o tamanho novamente.
|
1 2 3 4 5 6 7 |
SELECT table_name, round(data_length/1024/1024,2) AS data_mb, round(index_length/1024/1024,2) AS index_mb FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = 'sbtest1'; |
💥 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.
|
1 |
INSERT INTO sbtest1 (k, c, pad) SELECT k, c, pad FROM sbtest2 LIMIT 100000; |
👉 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:
👉 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:









