# DataFirefly Cleanup: guia completo

> 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…

- Página: <https://www.datafirefly.com/pt/documentation/dfcleanup/>
- Idioma: pt
- Atualizado em: 2026-09-02
- Outros idiomas: [fr](https://www.datafirefly.com/documentation/dfcleanup/index.md), [en](https://www.datafirefly.com/en/documentation/dfcleanup/index.md), [es](https://www.datafirefly.com/es/documentation/dfcleanup/index.md), [de](https://www.datafirefly.com/de/documentation/dfcleanup/index.md), [pl](https://www.datafirefly.com/pl/documentation/dfcleanup/index.md), [it](https://www.datafirefly.com/it/documentation/dfcleanup/index.md), [nl](https://www.datafirefly.com/nl/documentation/dfcleanup/index.md)
- Índice: <https://www.datafirefly.com/pt/documentation/llms.txt>

## 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

1. Descarregue o ficheiro `dfcleanup.zip` a partir da sua conta DataFirefly.
2. No seu back-office PrestaShop, vá a **Módulos > Gestor de módulos > Carregar um módulo**.
3. 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.
4. 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:

1. **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.
2. **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` / `columnExists` através da `information_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 permite `LIMIT` nessa 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.
