“Ok… entendi tudo.
Mas como eu recupero espaço de verdade?”
Mas como eu recupero espaço de verdade?”
🧠 Resumo da série até aqui (em 10 segundos)….
👉 DELETE não remove espaço físico
👉 MVCC mantém versões
👉 Undo Log guarda histórico
👉 Purge limpa versões antigas
💥 Mas nada disso devolve espaço pro disco.
📦 1. O problema real
Quando nós fazemos:
|
1 |
DELETE FROM sbtest1 WHERE id < 600000 |
👉 o que acontece:
- dados saem
- espaço fica interno
- arquivo continua do mesmo tamanho
👉 Resultado:
🧱 tabela “vazia”, mas ocupando GB no disco.
⚙️ 2. Por que isso acontece?
Porque o InnoDB:
- trabalha com páginas fixas
- reaproveita espaço internamente
- não remove páginas do arquivo
👉 Traduzindo:
O espaço vira “livre dentro da tabela”, mas NÃO volta pro sistema….
💥 3. Como recuperar espaço de verdade
✅ Opção 1 — OPTIMIZE TABLE.
|
1 |
OPTIMIZE TABLE sbtest1; |
👉 O que ele faz:
- recria a tabela.
- reorganiza os dados.
- remove fragmentação.
- devolve espaço pro disco.
⚠️ Problema
- pode travar a tabela.
- copia tudo de novo.
- pode demorar MUITO.
👉 Em tabela grande = dor 😅
⚙️ 4. O que realmente acontece por trás
O OPTIMIZE basicamente:
🚨 5. Quando usar OPTIMIZE TABLE
Use quando:
✅ deletou MUITOS dados.
✅ tabela ficou fragmentada.
✅ espaço em disco é problema.
❌ Quando NÃO usar
Evite em produção se:
- tabela é muito grande.
- sistema não pode parar.
- não tem espaço extra disponível.
🚀 6. Alternativas melhores (produção).
🔹 Recreate manual
|
1 2 3 |
CREATE TABLE nova LIKE antiga; INSERT INTO nova SELECT * FROM antiga; RENAME TABLE antiga TO old, nova TO antiga; |
🧠 Insight final (o mais importante da série)
- DELETE limpa os dados.
- MVCC protege consistência.
- Purge limpa versões.
💥 Mas só REBUILD devolve espaço.
Se tem uma coisa pra levar dessa série:
“No MySQL, apagar dado é fácil… liberar espaço é outra história.”
Referências.
Passo a Passo -> Optimize Table






