Come ottimizzare il database di WordPress per velocizzare il sito
Il database è il motore nascosto di WordPress: ogni pagina, articolo, commento, impostazione e dato del sito vive nel database MySQL. Con il tempo, il database accumula dati inutili che lo appesantiscono: revisioni infinite degli articoli, commenti spam, opzioni transienti scadute, tabelle frammentate e meta dati orfani. Un database non ottimizzato rallenta ogni singola query e di conseguenza ogni pagina del sito. In questa guida ti mostro come ottimizzare il database di WordPress per ottenere un sito più veloce e reattivo.
Perché il database diventa lento
WordPress interagisce costantemente con il database. Una singola pagina può generare 20-50 query al database — e su siti con WooCommerce o molti plugin questo numero può superare le 200 query. Ogni query deve cercare i dati nelle tabelle, e più le tabelle sono grandi e frammentate, più ogni query impiega tempo.
Le cause principali dell’appesantimento sono:
- Revisioni degli articoli: WordPress salva automaticamente ogni modifica come revisione. Un articolo modificato 50 volte ha 50 revisioni nel database, ognuna con il contenuto completo dell’articolo.
- Opzioni transienti: dati temporanei salvati dai plugin nella tabella wp_options. Molti plugin non puliscono i transienti scaduti, che si accumulano nel tempo.
- Commenti spam e cestinati: Akismet blocca lo spam ma non lo elimina automaticamente. Migliaia di commenti spam occupano spazio e rallentano le query.
- Meta dati orfani: quando elimini un articolo o un commento, i relativi meta dati possono rimanere nel database come righe orfane.
- Tabelle di plugin disinstallati: molti plugin creano tabelle personalizzate nel database ma non le rimuovono quando vengono disinstallati.
- Autoload di wp_options: la tabella wp_options ha un campo autoload che carica automaticamente determinate opzioni a ogni richiesta. Plugin che salvano grandi quantità di dati con autoload=yes rallentano ogni pagina.
Misurare le prestazioni del database
Prima di ottimizzare, misura lo stato attuale per avere un riferimento. Il plugin Query Monitor è lo strumento migliore: mostra il numero totale di query per pagina, il tempo di esecuzione di ogni query, le query lente (superiori a 0.05 secondi) e quali plugin le generano.
Un sito WordPress ottimizzato dovrebbe avere meno di 50 query per pagina con un tempo totale sotto i 100ms. Se il tuo sito supera le 100 query o il tempo totale supera i 500ms, l’ottimizzazione del database è urgente.
Pulizia con WP-Optimize
WP-Optimize è il plugin gratuito più completo per la pulizia e l’ottimizzazione del database. Dopo l’installazione, vai su WP-Optimize → Database e troverai una lista di operazioni disponibili:
- Pulisci tutte le revisioni degli articoli: elimina le revisioni vecchie. Puoi scegliere di conservare le ultime 2-3 revisioni per sicurezza.
- Pulisci tutti i bozze automatiche: rimuove i salvataggi automatici non più necessari.
- Pulisci tutti i commenti cestinati: elimina definitivamente i commenti nel cestino.
- Pulisci tutti i commenti spam: rimuove lo spam identificato da Akismet o altri plugin.
- Rimuovi tutte le opzioni transienti: pulisce i dati temporanei scaduti dalla tabella wp_options.
- Ottimizza le tabelle del database: deframmenta le tabelle per migliorare le prestazioni delle query.
Configura la pulizia automatica settimanale: WP-Optimize può eseguire queste operazioni in background ogni settimana senza il tuo intervento.
Limitare le revisioni
La soluzione migliore per le revisioni è prevenirne l’accumulo anziché doverle pulire periodicamente. Aggiungi questa riga a wp-config.php:
define('WP_POST_REVISIONS', 3);
Questa impostazione limita le revisioni a un massimo di 3 per articolo. Le revisioni più vecchie vengono automaticamente eliminate quando ne viene creata una nuova. Se non hai bisogno delle revisioni, puoi disabilitarle completamente con il valore false, ma conservare 2-3 revisioni è consigliato come rete di sicurezza per recuperare contenuti persi accidentalmente.
Ottimizzare la tabella wp_options
La tabella wp_options è una delle più critiche per le prestazioni perché viene letta a ogni singola richiesta. WordPress carica in memoria tutte le righe con autoload = yes all’inizio di ogni pagina. Se questa tabella contiene migliaia di righe con autoload attivo, il caricamento iniziale rallenta sensibilmente.
Per analizzare la situazione, esegui questa query in phpMyAdmin:
SELECT SUM(LENGTH(option_value)) as autoload_size FROM wp_options WHERE autoload = 'yes';
Se il risultato supera i 500KB, hai un problema di autoload. Per identificare i responsabili:
SELECT option_name, LENGTH(option_value) as size FROM wp_options WHERE autoload = 'yes' ORDER BY size DESC LIMIT 20;
Questa query mostra le 20 opzioni autoloaded più grandi. Spesso troverai dati di plugin disinstallati, cache di plugin o log estesi. Puoi cambiare l’autoload a “no” per le opzioni non essenziali, ma fai attenzione: modificare opzioni di plugin attivi può causare malfunzionamenti. Intervieni solo sulle opzioni di plugin che hai rimosso.
Rimuovere le tabelle dei plugin disinstallati
Quando disinstalli un plugin dalla dashboard, WordPress dovrebbe rimuovere le sue tabelle personalizzate. Ma molti plugin non eseguono la pulizia completa, lasciando tabelle orfane nel database che occupano spazio inutilmente.
Per identificare le tabelle orfane, apri phpMyAdmin e confronta le tabelle presenti con quelle di WordPress standard (wp_posts, wp_options, wp_users, wp_usermeta, wp_postmeta, wp_comments, wp_commentmeta, wp_terms, wp_termmeta, wp_term_taxonomy, wp_term_relationships, wp_links). Tutte le altre tabelle sono state create da plugin o temi.
Se riconosci tabelle di plugin che non usi più (es. wp_actionscheduler_*, wp_wc_*, wp_yoast_*), puoi eliminarle con un DROP TABLE dopo aver verificato che il plugin corrispondente non sia attivo. Fai sempre un backup del database prima di eliminare tabelle.
Ottimizzazione delle query con indici
Gli indici del database sono come l’indice di un libro: permettono a MySQL di trovare i dati senza scorrere l’intera tabella. WordPress crea gli indici necessari durante l’installazione, ma plugin che creano tabelle personalizzate non sempre aggiungono indici adeguati.
Con Query Monitor attivo, identifica le query lente (evidenziate in rosso). Se una query lenta interroga una tabella personalizzata di un plugin, verifica in phpMyAdmin che la tabella abbia indici sulle colonne usate nelle clausole WHERE e JOIN. L’aggiunta di un indice su una colonna frequentemente cercata può ridurre il tempo della query da secondi a millisecondi.
Configurare Redis Object Cache
Per siti con traffico significativo, l’ottimizzazione del database più efficace è aggiungere una cache degli oggetti con Redis. Redis è un database in-memory che memorizza i risultati delle query WordPress nella RAM, eliminando la necessità di interrogare MySQL ripetutamente per gli stessi dati.
Se il tuo hosting supporta Redis (verificalo nel pannello o con il supporto tecnico), l’attivazione è semplice:
- Installa il plugin Redis Object Cache di Till Krüss.
- Vai su Impostazioni → Redis e clicca “Enable Object Cache”.
- Verifica che lo stato sia “Connected”.
L’impatto è immediato: le query ripetute vengono servite dalla RAM in microsecondi anziché millisecondi. Su siti WooCommerce con cataloghi ampi, Redis può ridurre il tempo di generazione delle pagine del 50-70%.
Manutenzione periodica
L’ottimizzazione del database non è un’operazione una tantum. Configura una routine di manutenzione:
- Settimanale: pulizia automatica con WP-Optimize (revisioni, spam, transienti).
- Mensile: ottimizzazione delle tabelle e controllo della dimensione del database.
- Trimestrale: analisi delle query con Query Monitor per identificare nuovi colli di bottiglia introdotti da aggiornamenti o nuovi plugin.
Il database è il tuo collo di bottiglia?
Un database ottimizzato è la base per un sito WordPress veloce. Se il tuo sito è lento nonostante un buon hosting e la cache attiva, il database potrebbe essere il collo di bottiglia nascosto. Il team di SoccorsoWP può analizzare il database del tuo sito, eseguire una pulizia approfondita, configurare Redis e implementare una routine di manutenzione automatica. Apri un ticket e fai respirare il tuo database.