DataFirefly Cleanup: guida completa
Installazione, sei pulitori, modalità audit/dry-run/execute, attività cron e risoluzione dei problemi del modulo di pulizia del database PrestaShop.
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
- Scarica il file
dfcleanup.zipdal tuo account DataFirefly. - Nel back office PrestaShop, vai su Moduli > Gestore moduli > Carica un modulo.
- Trascina lo ZIP o selezionalo. L’installazione crea la tabella dello storico, la scheda admin e il token cron.
- 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:
- 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. - 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 (
tableExistsecolumnExiststramiteinformation_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 consenteLIMITcon 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.