Pulizia dei Transients Scaduti e Ottimizzazione della Tabella wp_options: Guida Definitiva
Il tuo sito WordPress risponde a rilento? Noti blocchi continui durante le chiamate REST API o i test di salute del sito? Molto spesso il colpevole risiede nel database.
Quando la tabella delle opzioni accumula spazzatura, il server web va sotto sforzo. Le richieste loopback falliscono e compare il famigerato errore cURL 28 in WordPress. Per questo motivo, l’ottimizzazione della tabella wp_options diventa un passaggio obbligatorio per ogni webmaster.
In questa guida pratica vedremo come ripulire i transients orfani. Ridurremo drasticamente il peso del database per azzerare ogni forma di lag.
Perché i Transients e wp_options Causano Timeout cURL
I transient sono una forma nativa di memorizzazione temporanea della cache in WordPress. Plugin e temi li usano per salvare dati costosi da ricalcolare. Tra questi troviamo token API, feed remoti o frammenti di query.
Il ciclo di vita dei transients in WordPress
Ogni record transient possiede solitamente una data di scadenza precisa. WordPress salva queste informazioni dentro la tabella wp_options. Crea una riga con il valore effettivo e una riga con il timestamp di fine validità.
In teoria, WordPress dovrebbe eliminare i dati non appena scadono. In realtà, la cancellazione avviene solo quando un codice richiama esplicitamente quel transient scaduto. Se un plugin viene disinstallato, i suoi transient rimangono salvati per sempre nel database.
La trappola dell’autoload e il blocco delle richieste loopback
La tabella wp_options possiede una colonna chiamata autoload. Quando il suo valore è impostato su yes, WordPress carica quel record in memoria a ogni pagina richiesta.
I transient mal programmati vengono spesso salvati con autoload attivo. Con il tempo, la quantità di dati caricati automaticamente supera svariati megabyte. Ogni singola richiesta PHP richiede tempi enormi per completare l’elaborazione del database.
I client HTTP interni di cURL attendono pochi secondi prima di interrompere la connessione. Quando il server impiega troppo tempo per leggere la tabella opzioni, cURL va in timeout. Questo genera un blocco a catena delle attività in background.
Analisi Preventiva: Misurare il Peso di wp_options
Una corretta ottimizzazione della tabella wp_options parte sempre dalla diagnosi. Dobbiamo capire quanti dati vengono precaricati a ogni apertura di pagina.
Verificare la dimensione dei dati con phpMyAdmin
Accedi al pannello di controllo del tuo hosting. Apri lo strumento phpMyAdmin e seleziona il database del sito.
- Individua la riga corrispondente a
wp_options(o al prefisso personalizzato del tuo sito). - Osserva la colonna Dimensione: tabelle sane misurano tra 1 e 5 MB.
- Se la dimensione supera i 50 MB, significa che ci sono evidenti accumuli anomali.
Identificare le righe autoloaded più pesanti
Per scoprire quanta memoria viene sprecata a ogni caricamento, esegui una query mirata. Spostati nella scheda SQL di phpMyAdmin e incolla questo comando:
SELECT SUM(OCTET_LENGTH(option_value)) / 1024 / 1024 AS autoload_megabytes
FROM wp_options
WHERE autoload = 'yes';
Se il risultato supera gli 0.8 MB (800 KB), hai un problema di overhead. Siti web veloci mantengono questo parametro sotto i 400 KB complessivi.
Puoi anche elencare le opzioni più ingombranti per individuare subito i plugin responsabili:
SELECT option_name, length(option_value) AS option_size
FROM wp_options
WHERE autoload = 'yes'
ORDER BY option_size DESC
LIMIT 15;
Pulizia dei Transients Scaduti Passo dopo Passo
Possiamo eliminare i record obsoleti in totale sicurezza. Esistono due strade principali: la riga di comando oppure l’utilizzo di plugin gratuiti.
Metodo rapido con WP-CLI (da riga di comando)
Se hai accesso SSH al server, WP-CLI è lo strumento più rapido ed efficiente. Non sovraccarica la memoria PHP ed evita i blocchi dell’interfaccia web.
- Collegati tramite terminale alla directory radice del tuo sito WordPress.
- Esegui il comando di verifica:
wp transient list --expired. - Elimina tutti i transient scaduti digitando:
wp transient delete --expired. - Se desideri un reset completo, lancia:
wp transient delete --all.
La rimozione totale di tutti i transient non crea danni irreversibili. I dati essenziali verranno ricreati automaticamente al passaggio successivo.
Metodo grafico con plugin dedicati
Se preferisci non utilizzare la console di comando, puoi affidarti a strumenti gratuiti. Il più affidabile per questa operazione è Transients Manager.
- Installa e attiva il plugin dalla bacheca di WordPress.
- Vai nel menu Strumenti e clicca su Transients.
- Visualizza il numero totale di record e filtra per Expired.
- Clicca sul pulsante per cancellare tutte le voci scadute in un solo passaggio.
Nota operativa: Prima di cancellare qualsiasi riga dal database o lanciare query SQL, esegui sempre un backup completo. In caso di errore potrai ripristinare il sito in pochi minuti.
Guida Pratica: Manutenzione della Tabella via SQL
Spesso i transient orfani non contengono più la riga di scadenza associata. I plugin di pulizia automatica non riescono a rilevarli. In questa situazione dobbiamo intervenire direttamente via database.
Backup obbligatorio del database
Non saltare mai questo passaggio. Da phpMyAdmin, clicca sulla scheda Esporta. Scegli il metodo Rapido con formato SQL e salva il file sul computer.
Query SQL per eliminare i transient orfani
Ecco la procedura operativa per l’ottimizzazione della tabella wp_options tramite codice SQL. Apri la finestra SQL di phpMyAdmin ed esegui i comandi in sequenza.
Per prima cosa rimuoviamo i transient scaduti rimasti orfani:
DELETE FROM wp_options
WHERE option_name LIKE ('_transient_%')
AND option_name NOT LIKE ('_transient_timeout_%')
AND option_name NOT IN (
SELECT CONCAT('_transient_', SUBSTRING(option_name, 20))
FROM (
SELECT option_name FROM wp_options WHERE option_name LIKE ('_transient_timeout_%')
) as timeout_table
);
Successivamente eliminiamo i timeout obsoleti che fanno riferimento a transient già cancellati:
DELETE FROM wp_options
WHERE option_name LIKE ('_transient_timeout_%')
AND option_value < UNIX_TIMESTAMP();
Deframmentazione della tabella con OPTIMIZE TABLE
Dopo aver cancellato migliaia di record, MySQL lascia dello spazio vuoto non allocato. Questo spazio crea frammentazione e rallenta i dischi del server.
Per compattare la tabella e rigenerare gli indici, lancia questa istruzione:
OPTIMIZE TABLE wp_options;
Questo comando ricostruisce fisicamente i file sul server. Riduce lo spazio occupato su disco e velocizza notevolmente la lettura delle opzioni.
Prevenzione e Automazione nel Lungo Periodo
Risolvere l’emergenza non basta se il problema tende a ripresentarsi nel tempo. Occorre predisporre una manutenzione automatica periodica.
Gestione tramite Cron Job del server
Il cron nativo di WordPress (wp-cron.php) viene innescato solo dalle visite degli utenti. Nei siti con basso traffico o con cache totale, i cron si bloccano.
- Disabilita il cron nativo inserendo
define('DISABLE_WP_CRON', true);nel filewp-config.php. - Imposta un vero cron job sul pannello di hosting (cPanel o Plesk).
- Fai eseguire il comando ogni 15 minuti:
wget -q -O - https://tuosito.it/wp-cron.php >/dev/null 2>&1.
Un sistema cron efficiente garantisce che WordPress pulisca i propri dati temporanei senza accumuli anomali.
Configurazione corretta dell’Object Cache
Se utilizzi un server VPS o un hosting avanzato, attiva una memoria cache persistente in RAM. Puoi scegliere tra Redis o Memcached.
Quando l’Object Cache è attivo, WordPress non salva più i transient su wp_options. Tutti i dati temporanei finiscono nella memoria RAM del server. Questo azzera totalmente il carico di lavoro sul database MySQL.
Domande Frequenti su Transients e cURL
Perché WordPress non elimina da solo tutti i transient scaduti?
WordPress adotta un approccio passivo per salvaguardare le prestazioni del server. Non effettua scansioni continue del database per cercare record scaduti. Cancella un transient solo quando una richiesta HTTP tenta di leggerlo e ne constata la scadenza. I record abbandonati da plugin disattivati finiscono così per accumularsi senza controllo.
Come influisce l’object cache (Redis) sui transients?
L’object cache intercetta tutte le chiamate ai transients. Al posto di creare righe dentro la tabella wp_options, le scrive nella memoria volatile del server. La RAM possiede una gestione nativa delle scadenze e una velocità superiore rispetto al disco. In questo modo si elimina alla radice ogni collo di bottiglia del database.
In che modo l’ottimizzazione della tabella wp_options previene i timeout di cURL?
Le richieste cURL loopback interrogano il sito stesso per verificare cron e API. Quando la tabella opzioni è gonfia, ogni richiesta PHP impiega secondi per avviarsi. Il client cURL raggiunge il limite di tempo predefinito e interrompe bruscamente la chiamata. Ripulire la tabella rende istantanea la risposta del server e risolve definitivamente ogni errore di connessione.
