DataFirefly Cleanup: guia completo
Instalação, seis limpadores, modos auditoria/simulação/execução, tarefa cron e resolução de problemas do módulo de limpeza da base de dados do PrestaShop.
Apresentação
O DataFirefly Cleanup é um módulo de administração para PrestaShop 8 e 9 que limpa a sua base de dados em segurança: estatísticas obsoletas, carrinhos abandonados, registos antigos, pesquisas desatualizadas, metadados órfãos e imagens órfãs. Cada limpador tem três modos (auditoria, simulação e execução) e o módulo calcula o ganho de espaço em MB antes de qualquer ação.
O módulo não altera o seu tema nem os ficheiros do núcleo do PrestaShop. Cria apenas uma tabela (o histórico das limpezas) e um separador de administração.
Instalação
- Descarregue o ficheiro
dfcleanup.zipa partir da sua conta DataFirefly. - No seu back-office PrestaShop, vá a Módulos > Gestor de módulos > Carregar um módulo.
- Arraste o ZIP ou selecione-o. A instalação cria a tabela de histórico, o separador de administração e o token do cron.
- Abra Parâmetros avançados > DataFirefly Cleanup.
Pré-requisitos: PrestaShop 8.0+ ou 9.0+, PHP 8.0+, MySQL 5.7+ ou MariaDB 10.3+.
O painel
O ecrã principal apresenta três blocos de informação no topo:
- Tamanho da base de dados — o espaço total ocupado pelas suas tabelas (dados + índices), calculado através da
information_schema. - Ganho potencial — a estimativa do espaço recuperável se todos os limpadores fossem executados.
- Percentagem recuperável — a relação entre os dois.
Por baixo, o top 10 das maiores tabelas mostra-lhe para onde vai realmente o seu espaço em disco. As tabelas de estatísticas (ps_connections, ps_page_viewed) aparecem quase sempre no topo numa loja ativa.
Os seis limpadores
Estatísticas
Limpa a ps_connections (e as suas tabelas filhas connections_page e connections_source), a ps_page_viewed, a ps_referrer_cache, a ps_pagenotfound e os visitantes órfãos. Retenção predefinida: 90 dias. É geralmente o limpador com maior ganho, já que as tabelas de estatísticas crescem a cada visita.
Carrinhos abandonados
Elimina os carrinhos sem encomenda associada mais antigos do que a retenção (30 dias por predefinição), bem como as linhas órfãs de cart_product e cart_cart_rule e as regras de carrinho expiradas.
Um carrinho convertido em encomenda nunca é eliminado: cada consulta verifica a ausência de encomenda através de uma junção com ps_orders. Os seus dados de encomenda são intocáveis.
Registos da aplicação
Reduz a ps_log com uma retenção ponderada pela gravidade: as entradas informativas e os avisos (gravidade 1-2) são eliminados ao fim da retenção configurada (30 dias por predefinição), enquanto os erros e os erros críticos (gravidade 3-4) são conservados o dobro do tempo.
Pesquisas obsoletas
Limpa o histórico da ps_statssearch (60 dias por predefinição) e as linhas órfãs do índice de pesquisa (search_index, search_word) que apontam para produtos eliminados.
Metadados órfãos
Visa as linhas cujo elemento pai já não existe: product_lang, product_shop, product_attribute, category_product, stock_available, specific_price, customization, moradas eliminadas de forma lógica e sem encomenda, image_lang e image_shop. Aqui não há noção de retenção: um órfão é um órfão.
Imagens órfãs
Duas vertentes: as entradas da ps_image cujo produto já não existe (sempre ativa) e uma análise do sistema de ficheiros opcional, que percorre a pasta das imagens de produto à procura de ficheiros JPG sem entrada na base de dados. A análise está limitada a 200 000 ficheiros, por segurança.
Os três modos
| Modo | Escrita na base | Utilização |
|---|---|---|
| Auditoria | Nenhuma | Contar as linhas em causa e estimar o ganho. A executar primeiro, sempre. |
| Simulação | Apenas o histórico | Simular a execução e guardar um registo datado do âmbito. |
| Execução | Eliminação real | Eliminar em lotes de 5000 linhas (configurável), com micropausas entre lotes. |
Antes de qualquer execução: faça uma cópia de segurança da sua base de dados. A limpeza é irreversível. Fluxo recomendado: Auditoria → Simulação → Cópia de segurança → Execução → OPTIMIZE TABLE.
OPTIMIZE TABLE
Eliminar linhas não devolve imediatamente o espaço ao sistema: o InnoDB conserva o espaço no ficheiro da tabela. A caixa OPTIMIZE TABLE depois da execução reconstrói as tabelas limpas para devolver o espaço físico ao disco (exige o innodb_file_per_table, ativado por predefinição nas instalações modernas). A reservar para as horas de menor tráfego: a operação bloqueia brevemente cada tabela.
Tarefa cron
O painel Limpeza agendada (cron) do ecrã principal permite-lhe automatizar as limpezas.
Configuração
- Ativar o cron — interruptor global. Se estiver desativado, o endpoint responde 503 mesmo com um token válido.
- Modo — auditoria, simulação (predefinição, sem risco), execução, ou execução + OPTIMIZE.
- Limpadores a executar — caixas de seleção. Por predefinição: estatísticas, carrinhos, registos e pesquisas. Os metadados e as imagens ficam de fora, por opção expressa.
URL e token
O endpoint público é /module/dfcleanup/cron?token=O_SEU_TOKEN. O token (32 caracteres hexadecimais) é gerado na instalação e verificado em tempo constante. O botão Regenerar o token invalida imediatamente o URL antigo.
Agendamento
Duas opções:
- Módulo cronjobs do PrestaShop — se estiver instalado, a tarefa inscreve-se aí automaticamente (hook
actionRetrieveCronJobs), agendada para as 3h00 de cada dia. Altere o horário na configuração do módulo cronjobs. - Crontab do sistema — copie a linha apresentada na administração:
0 3 * * * /usr/bin/curl -s 'https://a-sua-loja.com/module/dfcleanup/cron?token=XXXX' > /dev/null 2>&1
Alterações pontuais
Pode alterar o modo e os limpadores numa chamada específica, sem mexer na configuração:
?token=XXXX&mode=audit
?token=XXXX&mode=execute&cleaners=stats,log
O botão Executar o cron agora executa de imediato a configuração atual, prático para testar sem esperar pela próxima passagem.
Definições
- Tamanho do lote — número de linhas eliminadas por consulta (predefinição 5000, mínimo 100, máximo 100 000). Baixe-o num alojamento partilhado com restrições, aumente-o num servidor dedicado potente.
- Retenção do histórico — tempo de conservação das entradas de histórico do módulo (180 dias por predefinição).
- Retenção por limpador — em dias. 0 = desativa o filtro temporal (os limpadores de órfãos ignoram esta definição).
Histórico
Cada ação (auditoria, simulação, execução, manual ou por cron) fica registada: limpador, modo, linhas afetadas, bytes libertados, detalhe por tabela em JSON, operador (e-mail do administrador, cron ou cron (manual)) e data. A tabela de histórico é limpa automaticamente segundo a retenção configurada.
Resolução de problemas
Tempo limite excedido em eliminações grandes
O módulo desativa o limite de tempo do PHP durante a execução, mas alguns alojamentos impõem limites ao nível do servidor web. Nesse caso, reduza o tamanho do lote, execute limpador a limpador, ou passe pelo cron em CLI (o curl a partir da crontab não está sujeito aos limites do servidor web).
O endpoint do cron responde 403
O token fornecido não corresponde. Verifique se o URL da sua crontab está atualizado: um token regenerado invalida o URL antigo.
O endpoint do cron responde 503
O cron está desativado nas definições do módulo. Ative-o no painel Limpeza agendada.
O ganho apresentado difere do espaço realmente libertado
O ganho é uma estimativa proporcional (linhas_eliminadas / linhas_totais × tamanho_da_tabela). O espaço realmente devolvido ao disco depende do OPTIMIZE TABLE e da fragmentação. A estimativa é propositadamente conservadora.
Notas técnicas
- O módulo usa uma deteção defensiva do esquema (
tableExists/columnExistsatravés dainformation_schema): adapta-se às diferenças entre PS 8 e PS 9 e ignora as tabelas ausentes. - As eliminações numa só tabela são feitas em lotes com
LIMIT; as eliminações em várias tabelas (junções) são executadas num único comando, uma vez que o MySQL não permiteLIMITnessa sintaxe. - O token do cron é comparado com
hash_equals(tempo constante), para resistir a ataques por cronometragem. - Compatível com multiloja. Interface em FR/EN/ES/DE.
Numa loja portuguesa — A interface não é fornecida em português: traduza-a em Parâmetros avançados > Traduções, escolhendo dfcleanup. Tenha em conta que a limpeza das estatísticas e dos registos apaga dados de navegação: se conservar esses dados para responder a pedidos de titulares ao abrigo do RGPD, defina as retenções em coerência com o prazo que anunciou na sua política de privacidade, e não apenas em função do espaço em disco.