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

“Se o InnoDB guarda versões antigas… quem limpa essa bagunça?”

No post anterior, vimos que:

👉 DELETE não apaga imediatamente
👉 versões antigas ficam no Undo Log
👉 múltiplas versões coexistem por causa do MVCC.

Agora vem a peça que fecha tudo:

💥 Purge Thread.

 

🧠 1. O que é o Purge Thread?

Você pode pensar nele como:

🧹 um processo em background responsável por limpar versões antigas de dados

Mais tecnicamente:

  • ele percorre o undo log
  • remove versões que não são mais necessárias
  • libera espaço interno dentro do InnoDB.

 

📌 Definição direta

O Purge só remove dados quando nenhuma transação precisa mais deles.

Ou seja: 👉 ele depende diretamente do MVCC….

 

⚙️ 2. Quando o Purge pode trabalhar?

O Purge Thread só pode agir quando:

✅ todas as transações que poderiam enxergar a versão antiga já terminaram
✅ aquela versão não é mais necessária para leitura consistente
✅ não há necessidade de rollback

💡 E aqui está o ponto crítico:

O MySQL é conservador — ele prefere manter dados antigos do que quebrar consistência.

 

🔥 3. Fluxo completo agora (entendendo o contexto do post 1 e 2).

Aqui você conecta toda a série até agora:

 

🚨 4. Quando o Purge NÃO consegue acompanhar

Aqui começa a parte que mais importa em ambiente real.

⚠️ Cenário clássico:

Você tem:

  • aplicação com transações abertas
  • relatórios longos
  • conexão esquecida sem COMMIT

👉 Resultado:

O Purge fica travado esperando essas transações terminarem.

 

💣 Consequências:

📈 1) Crescimento do Undo Log

  • mais versões antigas acumuladas
  • consumo de espaço

🐌 2) Queda de performance

  • mais versões para verificar
  • leitura mais custosa

📦 3) Tabela “não encolhe”

  • conecta diretamente com o Post 1 (onde apresentei sobre o delete).
  • espaço continua ocupado.

 

🚨 5. Sintoma real que muita gente ignora.

O banco começa a:

  • ficar mais pesado
  • crescer em disco
  • demorar mais nas queries

E ninguém sabe o motivo 😅

👉 Mas o problema é:

O Purge não está conseguindo acompanhar o volume de mudanças.

 

⚠️ 7. Por que isso acontece na prática?

Principais causas:

🔴 1) Transações longas

  • SELECT aberto.
  • job demorando.

🔴 2) Aplicação sem controle de transação

  • BEGIN sem COMMIT.
  • connection pool mal utilizado.

🔴 3) Alto volume de DELETE/UPDATE

  • gera muitas versões.
  • aumenta backlog do purge.

 

🧠 8. Resumo (o mais importante da série até agora)

👉 DELETE não apaga.
👉 MVCC mantém versões.
👉 Undo Log guarda histórico.
👉 Purge Thread limpa… quando consegue.

 

Agora você já entendeu tudo.

Mas falta o último ponto:

“Se o Purge limpa… por que o arquivo da tabela continua grande?”

E mais importante:

“Como recuperar espaço de verdade no MySQL?”

👉 No próximo (e último) post da série:

💥 Por que sua tabela nunca diminui (e quando usar OPTIMIZE TABLE).

 

Referências.

MySQL Docs – Purge.

MySQL Docs – Innodb Undo Logs.

 

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