# DataFirefly Cleanup: guida completa

> Presentazione DataFirefly Cleanup è un modulo di amministrazione per PrestaShop 8 e 9 che ripulisce il database in tutta sicurezza: statistiche obsolete, carrelli abbandonati, log vecchi, ricerche scadute, metadati orfani…

- Pagina: <https://www.datafirefly.com/it/documentation/dfcleanup/>
- Lingua: it
- Aggiornato il: 2026-08-02
- Altre lingue: [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), [nl](https://www.datafirefly.com/nl/documentation/dfcleanup/index.md), [pt](https://www.datafirefly.com/pt/documentation/dfcleanup/index.md)
- Indice: <https://www.datafirefly.com/it/documentation/llms.txt>

## Presentazione

DataFirefly Cleanup è un modulo di amministrazione per PrestaShop 8 e 9 che ripulisce il database in tutta sicurezza: statistiche obsolete, carrelli abbandonati, log vecchi, ricerche scadute, metadati orfani e immagini orfane. Ogni pulitore propone tre modalità, audit, dry-run ed execute, e il modulo calcola il guadagno di spazio in MB prima di qualsiasi azione.

Il modulo non modifica né il tuo tema né i file del core di PrestaShop. Crea una sola tabella (lo storico delle pulizie) e una scheda di amministrazione.

## Installazione

1. Scarica il file `dfcleanup.zip` dal tuo account DataFirefly.
2. Nel back office PrestaShop, vai su **Moduli > Gestore moduli > Carica un modulo**.
3. Trascina lo ZIP o selezionalo. L'installazione crea la tabella dello storico, la scheda admin e il token cron.
4. Apri **Parametri avanzati > DataFirefly Cleanup**.

Requisiti: PrestaShop 8.0+ o 9.0+, PHP 8.0+, MySQL 5.7+ o MariaDB 10.3+.

## La dashboard

La schermata principale mostra tre blocchi informativi in cima:

- **Dimensione del database**: lo spazio totale occupato dalle tue tabelle (dati più indici), calcolato tramite `information_schema`.
- **Guadagno potenziale**: la stima dello spazio recuperabile se venissero eseguiti tutti i pulitori.
- **Percentuale recuperabile**: il rapporto tra i due valori.

Sotto, la **top 10 delle tabelle più grandi** mostra dove finisce davvero il tuo spazio su disco. Le tabelle di statistiche (`ps_connections`, `ps_page_viewed`) sono quasi sempre in testa su un negozio attivo.

## I sei pulitori

### Statistiche

Pulisce `ps_connections` (e le sue tabelle figlie `connections_page` e `connections_source`), `ps_page_viewed`, `ps_referrer_cache`, `ps_pagenotfound` e i guest orfani. Ritenzione predefinita: 90 giorni. È in genere il pulitore con il guadagno maggiore, dato che le tabelle di statistiche crescono a ogni visita.

### Carrelli abbandonati

Elimina i carrelli senza ordine associato più vecchi della ritenzione (30 giorni per impostazione predefinita), oltre alle righe orfane di `cart_product` e `cart_cart_rule` e alle regole carrello scadute.

Un carrello convertito in ordine non viene **mai** eliminato: ogni query verifica l'assenza di ordine tramite una join su `ps_orders`. I tuoi dati d'ordine restano intoccabili.

### Log applicativi

Sfoltisce `ps_log` con una ritenzione ponderata per gravità: le voci informative e gli avvisi (gravità 1 e 2) vengono eliminati dopo la ritenzione configurata (30 giorni per impostazione predefinita), mentre gli errori e gli errori critici (gravità 3 e 4) vengono conservati il doppio del tempo.

### Ricerche obsolete

Pulisce lo storico `ps_statssearch` (60 giorni per impostazione predefinita) e le righe orfane dell'indice di ricerca (`search_index`, `search_word`) che puntano a prodotti eliminati.

### Metadati orfani

Prende di mira le righe il cui genitore non esiste più: `product_lang`, `product_shop`, `product_attribute`, `category_product`, `stock_available`, `specific_price`, `customization`, indirizzi soft-deleted senza ordine, `image_lang` e `image_shop`. Qui non esiste il concetto di ritenzione: un orfano è un orfano.

### Immagini orfane

Due parti: le voci `ps_image` il cui prodotto non esiste più (sempre attivo) e una **scansione del file system** opzionale che percorre la cartella delle immagini prodotto alla ricerca di file JPG senza voce in database. La scansione è limitata a 200.000 file per sicurezza.

## Le tre modalità

| Modalità | Scrittura in database | Uso |
| --- | --- | --- |
| **Audit** | Nessuna | Contare le righe interessate e stimare il guadagno. Da lanciare sempre per primo. |
| **Dry-run** | Solo storico | Simulare l'esecuzione e conservare una traccia datata del perimetro. |
| **Execute** | Eliminazione reale | Eliminare a lotti di 5.000 righe (configurabile), con micro-pause tra i lotti. |

**Prima di ogni Execute: fai un backup del database.** La pulizia è irreversibile. Flusso consigliato: Audit, Dry-run, Backup, Execute, OPTIMIZE TABLE.

## OPTIMIZE TABLE

Eliminare righe non restituisce immediatamente lo spazio al sistema: InnoDB conserva lo spazio nel file della tabella. La casella **OPTIMIZE TABLE dopo l'esecuzione** ricostruisce le tabelle pulite per restituire lo spazio fisico al disco (richiede `innodb_file_per_table`, attivo per impostazione predefinita sulle installazioni moderne). Da riservare alle ore di minor traffico: l'operazione blocca brevemente ogni tabella.

## Attività cron

Il pannello **Pulizia pianificata (cron)** della dashboard permette di automatizzare le pulizie.

### Configurazione

- **Attiva il cron**: interruttore globale. Se disattivato, l'endpoint risponde 503 anche con un token valido.
- **Modalità**: audit, dry-run (predefinita, senza rischi), execute, oppure execute più OPTIMIZE.
- **Pulitori da eseguire**: caselle di selezione. Per impostazione predefinita: stats, cart, log, search. Metadata e image sono opt-in.

### URL e token

L'endpoint pubblico è `/module/dfcleanup/cron?token=IL_TUO_TOKEN`. Il token (32 caratteri esadecimali) viene generato all'installazione e verificato a tempo costante. Il pulsante **Rigenera il token** invalida immediatamente il vecchio URL.

### Pianificazione

Due opzioni:

1. **Modulo cronjobs di PrestaShop**: se installato, l'attività vi si registra automaticamente (hook `actionRetrieveCronJobs`), pianificata alle 3:00 ogni giorno. Modifica l'orario dalla configurazione del modulo cronjobs.
2. **Crontab di sistema**: copia la riga mostrata nell'admin:

```
0 3 * * * /usr/bin/curl -s 'https://il-tuo-negozio.com/module/dfcleanup/cron?token=XXXX' > /dev/null 2>&1
```

### Override puntuali

Puoi sovrascrivere la modalità e i pulitori per una singola chiamata, senza toccare la configurazione:

```
?token=XXXX&mode=audit
?token=XXXX&mode=execute&cleaners=stats,log
```

Il pulsante **Lancia il cron adesso** esegue immediatamente la configurazione corrente, comodo per fare un test senza attendere la prossima scadenza.

## Impostazioni

- **Dimensione del lotto**: numero di righe eliminate per query (predefinito 5.000, minimo 100, massimo 100.000). Abbassalo su un hosting condiviso limitato, alzalo su un server dedicato potente.
- **Ritenzione dello storico**: durata di conservazione delle voci di storico del modulo (180 giorni per impostazione predefinita).
- **Ritenzione per pulitore**: in giorni. 0 disattiva il filtro temporale (i pulitori di orfani ignorano questa impostazione).

## Storico

Ogni azione (audit, dry-run, execute, manuale o da cron) viene registrata: pulitore, modalità, righe interessate, byte liberati, dettaglio per tabella in JSON, operatore (email admin, `cron` o `cron (manual)`), data. La tabella dello storico viene ripulita automaticamente in base alla ritenzione configurata.

## Risoluzione dei problemi

### Timeout sulle eliminazioni di grandi dimensioni

Il modulo disattiva il limite di tempo PHP durante l'esecuzione, ma alcuni hosting impongono limiti a livello di web server. In questo caso riduci la dimensione del lotto, esegui un pulitore alla volta, oppure passa dal cron in CLI (curl da crontab non è soggetto ai limiti del web server).

### L'endpoint cron risponde 403

Il token fornito non corrisponde. Verifica che l'URL nel tuo crontab sia aggiornato: un token rigenerato invalida il vecchio URL.

### L'endpoint cron risponde 503

Il cron è disattivato nelle impostazioni del modulo. Attivalo dal pannello Pulizia pianificata.

### Il guadagno mostrato differisce dallo spazio realmente liberato

Il guadagno è una stima proporzionale (`righe_eliminate / righe_totali × dimensione_tabella`). Lo spazio realmente restituito al disco dipende da OPTIMIZE TABLE e dalla frammentazione. La stima è volutamente conservativa.

## Note tecniche

- Il modulo usa un rilevamento difensivo dello schema (`tableExists` e `columnExists` tramite `information_schema`): si adatta alle differenze tra PS 8 e PS 9 e ignora le tabelle assenti.
- Le eliminazioni su tabella singola sono suddivise in lotti con `LIMIT`; le eliminazioni multi-tabella (join) vengono eseguite in un unico comando, poiché MySQL non consente `LIMIT` con questa sintassi.
- Il token cron viene confrontato tramite `hash_equals` (tempo costante) per resistere agli attacchi temporali.
- Compatibile con il multinegozio. Interfaccia in FR, EN, ES e DE.
