Velocizzare il database WordPress

Struttura del database WordPress

Il database di WordPress è composto da circa 12 tabelle predefinite (con prefisso configurabile, tipicamente wp_). Le tabelle principali sono: wp_posts (contenuti: articoli, pagine, revisioni, allegati), wp_postmeta (metadati dei contenuti), wp_options (impostazioni del sito e opzioni dei plugin), wp_usermeta (metadati degli utenti), wp_terms (categorie, tag), wp_term_relationships (relazioni contenuti-tassonomie), wp_comments e wp_commentmeta (commenti). Con il tempo, queste tabelle accumulano dati superflui che rallentano le query e aumentano le dimensioni del database, incidendo negativamente sulle performance del sito.

Le tabelle più soggette a gonfiore sono wp_posts (per le revisioni e gli auto-salvataggi), wp_postmeta (ogni plugin o page builder aggiunge righe infinite), wp_options (transienti scaduti, opzioni di plugin disattivati) e wp_usermeta (dati di sessione, preferenze utente). Capire la struttura è il primo passo per un’ottimizzazione mirata.

Fonti di gonfiore del database

Identificare le cause del gonfiore ti permette di intervenire chirurgicamente senza rischiare di eliminare dati importanti.

Revisioni e auto-salvataggi

Ogni volta che modifichi un articolo o una pagina, WordPress salva una revisione. Con 100 modifiche a un articolo, hai 100 righe in wp_posts per un singolo contenuto. Le revisioni sono utili per il rollback, ma dopo la pubblicazione raramente servono. Limita le revisioni a 3-5 per post aggiungendo define('WP_POST_REVISIONS', 5); in wp-config.php, oppure cancellale periodicamente.

Bozze automatiche e cestino

WordPress salva bozze automatiche ogni 2-4 minuti durante la scrittura. Se l’autore chiude il browser senza pubblicare, la bozza rimane nel database. Gli articoli nel cestino (trash) occupano spazio anche se non visibili. Configura lo svuotamento automatico del cestino: define('EMPTY_TRASH_DAYS', 30); in wp-config.php imposta la cancellazione definitiva dopo 30 giorni.

Commenti spam

Anche con Akismet o antiflirtro, i commenti spam si accumulano nel database. Akismet li sposta nello spam, ma non li elimina. Con migliaia di spam commenti al mese, la tabella wp_comments cresce rapidamente. Elimina periodicamente i commenti spam e considera la cancellazione automatica dopo 30 giorni con plugin come CleanTalk o WP-Optimize.

Transienti scaduti

I transienti sono dati temporanei che i plugin usano per caching. Durano da poche ore a qualche giorno. WordPress li cancella alla scadenza solo se il transient viene richiesto. I transienti scaduti non richiesti restano nella tabella wp_options, a volte centinaia di migliaia di righe. Plugin mal scritti possono generare transienti univoci che non scadono mai. La pulizia regolare dei transienti è essenziale.

Plugin per la pulizia del database

Se preferisci non scrivere SQL, i plugin offrono interfacce grafiche per la pulizia. Ecco i migliori:

WP-Optimize

WP-Optimize pulisce revisioni, bozze, commenti spam, transienti e tabelle. Offre anche ottimizzazione tabelle MySQL (OPTIMIZE TABLE), compressione immagini e caching. L’interfaccia seleziona cosa pulire con preview dei dati eliminabili. La pianificazione automatica è inclusa: imposta pulizia settimanale e WP-Optimize mantiene il database snello senza intervento manuale.

Advanced Database Cleaner

Specializzato nella pulizia del database, Advanced Database Cleaner rileva revisioni, bozze, post nel cestino, commenti spam, transienti scaduti, tabelle orfane (lasciate da plugin disinstallati), opzioni inutilizzate e metadati orfani. Mostra il numero di righe eliminabili e la dimensione stimata del recupero. Include un scheduler per pulizie automatiche. La versione PRO aggiunge pulizia di wp_postmeta orfano, wp_usermeta orfano e tabelle di plugin specifici.

Query SQL manuali per la pulizia

Per chi ha accesso diretto al database (phpMyAdmin, Adminer o riga di comando MySQL), le query manuali sono il metodo più rapido ed efficace. Ecco le query più utili. Sostituisci wp_ con il tuo prefisso.

Cancellare revisioni: DELETE FROM wp_posts WHERE post_type = 'revision';

Cancellare bozze automatiche: DELETE FROM wp_posts WHERE post_status = 'auto-draft';

Cancellare post nel cestino: DELETE FROM wp_posts WHERE post_status = 'trash';

Cancellare commenti spam: DELETE FROM wp_comments WHERE comment_approved = 'spam';

Cancellare transienti scaduti: DELETE FROM wp_options WHERE option_name LIKE '_transient_timeout_%' AND option_value < UNIX_TIMESTAMP(); e poi DELETE FROM wp_options WHERE option_name LIKE '_transient_%' WHERE option_name NOT LIKE '_transient_timeout_%';

Esegui sempre un backup prima di qualsiasi DELETE. Dopo la pulizia, ottimizza le tabelle con OPTIMIZE TABLE wp_posts, wp_postmeta, wp_options, wp_comments;

Ottimizzazione MySQL

Oltre alla pulizia, ottimizzare la configurazione di MySQL migliora le performance del database. Gli indici sono fondamentali: assicurati che le colonne usate in WHERE, JOIN e ORDER BY siano indicizzate. La tabella wp_postmeta è famosa per la mancanza di indici adeguati. Aggiungi un indice composto su post_id e meta_key per velocizzare le query dei plugin che leggono metadati. Abilita il query cache di MySQL (dimensioni consigliate: 64-256 MB) per memorizzare i risultati delle query più frequenti. Regola innodb_buffer_pool_size al 70-80% della RAM disponibile per database InnoDB. Disabilita performance_schema se non lo usi per risparmiare risorse.

InnoDB vs MyISAM: quale scegliere

WordPress usa InnoDB come motore predefinito dalla versione 5.5 di MySQL/MariaDB. InnoDB supporta transazioni ACID, foreign key, row-level locking e migliori performance in scritture concorrenti. MyISAM era il motore storico di WordPress: più veloce in letture semplici ma blocca l'intera tabella in scrittura, non supporta transazioni e si corrompe più facilmente. La scelta è chiara: usa InnoDB per tutte le tabelle WordPress. Se hai ancora tabelle MyISAM, convertile: ALTER TABLE wp_posts ENGINE=InnoDB;

Piano di manutenzione regolare

La pulizia del database non è un'operazione una tantum. Stabilisci un calendario di manutenzione: settimanale: cancella commenti spam, revisioni e bozze automatiche; mensile: cancella transienti scaduti, ottimizza tabelle, verifica la frammentazione; trimestrale: cancella metadati orfani, tabelle di plugin disinstallati, utenti non verificati; annuale: esporta e reimporta il database per ricostruire gli indici. L'automazione con plugin o cron job rende la manutenzione trasparente.

Monitoraggio delle performance del database

Monitora regolarmente la dimensione del database (phpMyAdmin mostra il totale in MB), il tempo medio delle query (con Query Monitor), la frammentazione delle tabelle (con SHOW TABLE STATUS), e la cache hit rate (con SHOW STATUS LIKE '%Qcache%'). Se il database supera 1 GB per un sito WordPress medio, probabilmente c'è gonfiore da rimuovere. Un database ottimizzato si riflette in tempi di caricamento ridotti e un server più reattivo.

Conclusioni

Velocizzare il database WordPress è uno degli interventi più efficaci per migliorare le performance del sito. La combinazione di pulizia regolare, ottimizzazione MySQL, scelta del motore corretto e monitoraggio continuo mantiene il database snello e veloce. Inizia con una pulizia iniziale usando un plugin o query SQL, poi automatizza la manutenzione periodica. Il risultato sarà un sito WordPress più veloce, un server meno carico e un'esperienza utente migliore.

Lascia una risposta