Dottor WP

Blog

11 Novembre 2026

WooCommerce lento con molti ordini: come ottimizzare il database

Perché un negozio WooCommerce rallenta con l'aumentare degli ordini e come ottimizzare il database in sicurezza, dal passaggio a HPOS alla cache Redis.

di Gian Marco Tocco

WooCommerce lento? Rimetti in forma il database — copertina dell'articolo di Dottor WP

In breve

Un negozio WooCommerce con molti ordini rallenta soprattutto perché il database si appesantisce: ordini salvati nelle tabelle generiche di WordPress, transient e sessioni scadute, log delle azioni programmate, opzioni caricate a ogni pagina. Si ottimizza passando a HPOS, pulendo i dati temporanei, riducendo l’autoload e aggiungendo una cache degli oggetti come Redis, sempre dopo un backup completo e possibilmente provando tutto in staging.

Quando un negozio cresce, il primo segnale spesso arriva dal pannello, prima ancora che dalla home: l’elenco ordini impiega secondi a caricarsi e il checkout diventa pesante nelle ore di punta. Ottimizzare il database di WooCommerce è quasi sempre l’intervento che dà più risultati in questi casi, più di un nuovo plugin di cache.

Perché WooCommerce rallenta quando crescono gli ordini?

Perché ogni ordine, sessione e processo in background lascia dati nel database, e alcune tabelle crescono molto più di quanto serva. Più righe ci sono, più lente diventano le interrogazioni, soprattutto quelle che il pannello e il checkout fanno a ogni caricamento.

Il peso arriva di solito da cinque fonti:

  • ordini nelle tabelle generiche: nel sistema tradizionale ogni ordine è un articolo di WordPress con decine di righe di metadati nella tabella wp_postmeta, condivisa con prodotti, pagine e tutto il resto;
  • transient: dati temporanei salvati da plugin e tema, che a volte restano anche dopo la scadenza;
  • sessioni dei clienti: ogni carrello di un visitatore non registrato genera una sessione salvata nel database;
  • log di Action Scheduler: la coda dei processi in background conserva lo storico delle azioni eseguite;
  • opzioni in autoload: impostazioni caricate a ogni singola pagina, anche quando non servono.

Cosa fare prima di toccare il database?

Un backup completo del database, scaricato e verificato, e se possibile una copia di staging su cui provare. Le operazioni di pulizia cancellano dati in modo definitivo: se elimini la cosa sbagliata, solo il backup ti salva.

Lavora in un orario con pochi ordini e ricorda che ripristinare un backup cancella gli ordini arrivati dopo il salvataggio: per questo lo staging è la scelta più sicura. La guida ai backup di WordPress spiega come fare una copia affidabile e come provarne il ripristino.

Come capisco cosa appesantisce il database?

Misurando prima di pulire: guarda quali tabelle occupano più spazio e quali interrogazioni sono lente, così intervieni dove serve.

Da phpMyAdmin o dal terminale puoi elencare le tabelle più grandi con questa interrogazione, che legge soltanto:

SELECT table_name,
       ROUND((data_length + index_length) / 1024 / 1024, 1) AS mb
FROM information_schema.tables
WHERE table_schema = DATABASE()
ORDER BY mb DESC
LIMIT 15;

Il plugin Query Monitor mostra le interrogazioni lente e chi le genera. Anche lo strumento Salute del sito di WordPress segnala alcuni problemi, come le opzioni in autoload eccessive e l’assenza di una cache degli oggetti persistente.

Cos’è HPOS e perché aiuta con molti ordini?

HPOS (High-Performance Order Storage) salva gli ordini in tabelle dedicate, con indici pensati per le ricerche sugli ordini, invece che nelle tabelle generiche di WordPress. Secondo la documentazione per sviluppatori di WooCommerce, questo riduce le operazioni di lettura e scrittura e le tabelle sovraccariche.

HPOS è attivo di default sulle nuove installazioni dalla versione 8.2; i negozi più vecchi possono ancora usare il sistema tradizionale. Per verificarlo e migrare, secondo la guida ufficiale:

  1. vai in WooCommerce, Impostazioni, Avanzate, Funzionalità e guarda quale archiviazione degli ordini è attiva;
  2. controlla l’elenco dei plugin incompatibili: finché ce ne sono, WooCommerce non permette il passaggio. Aggiornali o sostituiscili;
  3. attiva la modalità di compatibilità, che copia gli ordini nelle nuove tabelle in background. Su negozi con molti ordini può richiedere tempo, e lo stato si segue in WooCommerce, Stato, Azioni programmate;
  4. completata la sincronizzazione, passa all’archiviazione ad alte prestazioni e fai un test d’acquisto completo;
  5. dopo qualche giorno senza problemi, disattiva la modalità di compatibilità, che altrimenti scrive ogni ordine due volte.

Fai tutta la procedura prima in staging, con il backup pronto.

Come elimino i transient scaduti?

Dalla scheda Strumenti di WooCommerce, dove c’è un comando per cancellare i transient scaduti, oppure con WP-CLI. I transient sono dati temporanei che plugin e tema salvano nella tabella delle opzioni per non ricalcolarli a ogni visita.

WordPress elimina periodicamente quelli scaduti, ma se il cron non funziona bene possono accumularsi. Con WP-CLI il comando è:

wp transient delete --expired

È un’operazione sicura: i transient vengono ricreati quando servono. Se tornano ad accumularsi in massa, cerca il plugin responsabile o verifica il cron.

Le sessioni scadute pesano sul database?

Sì, se non vengono eliminate. WooCommerce salva il carrello di ogni visitatore in una tabella di sessioni e cancella periodicamente quelle scadute con un processo pianificato; se quel processo non gira, la tabella cresce senza limite.

Prima di tutto verifica che il cron funzioni, controllando in WooCommerce, Stato, Azioni programmate che non ci siano molte azioni in attesa con data passata. Negli Strumenti di WooCommerce c’è anche il comando per cancellare le sessioni dei clienti: attenzione, elimina tutte le sessioni, compresi i carrelli attivi in quel momento. Usalo solo in orari di traffico minimo e se la tabella è davvero fuori scala.

Come riduco i log di Action Scheduler?

Accorciando il periodo per cui vengono conservate le azioni completate e verificando perché ci sono azioni fallite in quantità. Action Scheduler è la coda dei processi in background di WooCommerce e di molti altri plugin, e salva ogni azione con il suo log in due tabelle dedicate.

Di base le azioni completate vengono conservate per 30 giorni. Su negozi con molti ordini, o con plugin che programmano migliaia di azioni al giorno, puoi ridurre il periodo con un filtro, da aggiungere in un plugin di snippet o nel tema child:

add_filter( 'action_scheduler_retention_period', function () {
    return 7 * DAY_IN_SECONDS;
} );

La pulizia avviene gradualmente, a blocchi. Se le tabelle sono piene di azioni fallite, prima di cancellarle apri qualche log: indicano quale plugin sta lavorando a vuoto, ed è su quello che devi intervenire.

Cos’è l’autoload in wp_options e perché rallenta tutto?

Sono le opzioni che WordPress carica in memoria a ogni pagina, anche quando non servono. Se plugin disinstallati o mal scritti ci lasciano molti dati, ogni richiesta, checkout compreso, ne paga il peso.

Dalla versione 6.6, come spiega la nota ufficiale di WordPress, la Salute del sito segnala un problema quando le opzioni in autoload superano gli 800 KB, e le singole opzioni molto grandi non vengono più caricate automaticamente per impostazione predefinita. Per vedere le più pesanti:

SELECT option_name, LENGTH(option_value) AS bytes
FROM wp_options
WHERE autoload IN ('yes', 'on', 'auto-on', 'auto')
ORDER BY bytes DESC
LIMIT 20;

Se il prefisso delle tue tabelle non è wp_, adattalo. Cerca opzioni di plugin che non usi più: puoi eliminarle o escluderle dall’autoload. Non toccare quelle di WordPress e WooCommerce se non sai a cosa servono.

Servono tutte quelle revisioni?

No. WordPress salva una revisione a ogni modifica di pagine e articoli e, di base, non pone limiti.

Puoi limitarle aggiungendo in wp-config.php una riga come define( 'WP_POST_REVISIONS', 5 ); e cancellare quelle vecchie con un plugin di pulizia affidabile, dopo il backup.

Gli indici del database fanno davvero la differenza?

Sì, su negozi grandi possono fare molta differenza. Un indice è come l’indice analitico di un libro: permette al database di trovare le righe senza leggerle tutte. Le tabelle standard di WordPress hanno indici pensati per siti generici, non per centinaia di migliaia di metadati.

Verifica che le tabelle usino il motore InnoDB e non il vecchio MyISAM, poi valuta un plugin come Index WP MySQL For Speed, che aggiunge indici più efficienti alle tabelle principali e permette di tornare indietro. Backup e staging anche qui: su tabelle grandi l’operazione richiede tempo e può rallentare le scritture.

Cosa fa una cache degli oggetti come Redis?

Tiene in memoria i risultati delle interrogazioni al database più frequenti, così WordPress non deve ripeterle a ogni pagina. È utile proprio dove la cache delle pagine non arriva: pannello, carrello, checkout, area cliente.

Serve che l’hosting offra Redis (o Memcached); poi si collega a WordPress con un plugin come Redis Object Cache. Se il tuo hosting non la offre, può essere un buon motivo per valutare un piano gestito, come spiego nel confronto tra hosting condiviso e gestito per WordPress.

Dagli interventi sicuri e con il miglior rapporto tra rischio e beneficio, lasciando per ultimi quelli strutturali.

Intervento Beneficio Rischio
Transient scaduti Medio Basso
Verifica del cron e delle azioni programmate Alto Basso
Riduzione dei log di Action Scheduler Medio Basso
Pulizia dell’autoload Alto Medio
Cache degli oggetti Redis Alto Basso
Migrazione a HPOS Alto Medio, va provata in staging
Nuovi indici sulle tabelle Alto su negozi grandi Medio

Dopo ogni intervento ripeti un test d’acquisto completo, come descritto nella guida alla manutenzione WooCommerce. Se stai preparando un picco di vendite, questa pulizia va fatta con qualche settimana di anticipo: la trovi nel calendario della checklist per il Black Friday.

Vuoi un database in forma senza rischi?

Con il servizio Ottimizzazione database ordini (190 €) analizziamo e ripuliamo il database del tuo negozio, con un backup completo prima di intervenire.

Scopri l’ottimizzazione del database →

Domande frequenti

Posso cancellare i vecchi ordini per velocizzare il negozio?

Meglio di no: gli ordini sono documenti con valore fiscale e contabile e servono anche per statistiche e assistenza. Con HPOS e una buona manutenzione del database, anche molti ordini storici non sono un problema.

Un plugin di ottimizzazione del database basta?

Aiuta per le pulizie di routine, come transient e revisioni, ma non risolve problemi strutturali come l’archiviazione degli ordini, gli indici o un cron che non funziona. Usalo sempre dopo un backup e senza attivare pulizie che non capisci.

Il passaggio a HPOS può far perdere ordini?

Se fatto con la modalità di compatibilità e dopo un backup, il rischio è molto basso, perché gli ordini restano anche nelle tabelle tradizionali finché non decidi diversamente. Il problema più frequente sono i plugin non compatibili, che WooCommerce segnala prima del passaggio.

Check-up gratuito

Il tuo sito ha lo stesso problema? Scoprilo in un minuto.

Inserisci l'indirizzo: controlliamo sicurezza, velocità, SEO, accessibilità e privacy e ti diamo un punteggio da 0 a 100. Gratis e senza installare nulla.

Apertura del check-up…

Risultato immediato e senza registrazione.

Check-up gratuito

Scopri come sta il tuo sito. Gratis, in un minuto.

Inserisci l'indirizzo e ricevi un punteggio su sicurezza, velocità, SEO, accessibilità e privacy. Se vuoi, poi ne parliamo in una chiamata gratuita di 15 minuti.