PS PrestaShop Principiante

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.

Aggiornato Versione del modulo 1.1.0

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.
Questa pagina ti è stata utile?

Ancora bloccato? Contatta l'assistenza