Ottimizzare il database di WordPress

Ottimizzare il database di WordPress

Il database di WordPress è probabilmente la parte più importante del tuo blog. Qui vengono salvate tutte le informazioni come le impostazioni di WP e dei plugin, i tag, le categorie, gli indirizzi delle immagini, i commenti, ma soprattutto le pagine e gli articoli!

Ogni volta che un utente visita una pagina, WordPress interroga il database per farsi fornire le informazioni desiderate. Quindi più il database è in ordine e meno informazioni sono custodite al suo interno, migliore sarà la velocità con cui WordPress riceverà tutti i dati e migliore sarà anche il tempo di caricamento della pagina. Proprio questo fattore è valutato con attenzione dai motori di ricerca per decidere il posizionamento del blog nelle SERP (risultati delle ricerche).

Più sei veloce, migliore sarà la tua posizione.

Ecco perchè è importante ottimizzare il database, riducendo al massimo le informazioni utili ed eliminando quelle non più necessarie. L’ottimizzazione porta sempre ad avere un miglioramento (altrimenti che ottimizzazione sarebbe :)), ovviamente maggiormente percepibile in blog con molti articoli.

Come ottimizzare il database in WordPress

Si potrebbe procedere andando a lavorare sul database a mano, ma perchè non usare semplicemente i favolosi plugin?

WP-DBmanager

Scarica ed attiva il plugin WP-DBmanager, comparirà l’avviso (warning) che indica che la cartella dei backup può essere visibile a tutti:

Warning DBManager

Per impedirne l’accesso, dovrai accedere al blog via FTP e spostare il file wp-content/plugins/wp-dbmanager/htaccess.txt nella cartella wp-content/backup-db/ e successivamente dovrai rinominarlo in .htaccess , ottenendo wp-content/backup-db/.htaccess .

Backup

Prima di cominciare a fare qualsiasi cosa, crea un backup del database, eviterai di maledirti per tutto il resto della vita 🙂

Vai su Database > Backup > e premi il pulsante Backup. La copia di sicurezza del tuo database verrà creata e salvata sul server nel giro di pochi secondi.

Ora puoi cominciare a fare sul serio 🙂

Limita le Revisioni

Ogni volta che si salva/aggiorna un articolo WordPress crea una revisione, una copia di backup dell’articolo. Quindi se aggiorni 20 volte l’articolo, verranno aggiunte 20 nuove righe (che contengono le informazioni) all’interno del database… Che spreco di spazio!

Limita il numero di revisioni (ma non eliminarle del tutto, mi hanno salvato la vita in più e più occasioni) aggiungendo questo codice nel file wp-config.php:

[php]
define( ‘WP_POST_REVISIONS’, 3);
[/php]

Dove al posto di 3 puoi mettere il numero di revisioni che vuoi mantenere… quelle nuove sovrascriveranno quelle precedenti.

Eliminare commenti Spam, In sospeso e Cestinati

Anche i commenti Spam, In sospeso (ma che non vuoi approvare) e Cestinati occupano spazio inutilmente. Vai su Commenti > Spam (oppure In sospeso oppure Cestinati) > ed eliminali. Nel caso dei commenti Spam, premi il pulsante Svuotare lo spam.

svuotare lo spam

Elimina la tabelle vuote o che non ti servono più

Questo passaggio è più un discorso di pulizia che di performance. Puoi eliminare le tabelle che sono rimaste anche dopo aver eliminato un plugin e che sicuramente non userai più.

Vai su Database > Database >, vedrai il numero di tabelle presenti nel tuo DB e quanti Records (le righe, ovvero le informazioni) hanno. Solitamente le tabelle con zero records sono da eliminare perchè non le stai utilizzando, ma non è sempre così.

Se non sai cosa stai facendo o se non sai a quale plugin sia associata la tabella, non eliminarla.

Altrimenti vai su Database > Empty/Drop Tables > e seleziona nella colonna Drop le tabelle che vuoi eliminare, dopodichè premi il pulsante Empty/Drop.

Ripara

All’interno del DB ci potrebbero essere delle tabelle corrotte. Per sicurezza, ripara tutte le tabelle (se non sono corrotte non succederà niente), vai su Database > Repair DB >, assicurati che tutte le tabelle siano su Yes e poi premi il pulsante Repair.

Ottimizza

Il tocco finale… ottimizzare le tabelle. Ancora una volta la procedura è davvero semplice. Vai su Database > Optimize DB >, assicurati che tutte le tabelle siano su Yes e poi premi il pulsante Optimize.

Ti consiglio di programmare l’ottimizzazione ogni 3-7 giorni (a seconda di quanto utilizzi il blog) e la riparazione delle tabelle ogni due settimane, da Database >DB Options > Automatic Scheduling.

Ecco i miei risultati

Sono partito con 42 tabelle, 69.922 records, dimensione dei dati pari a 34.8 MiB, 5.2 per l’index e 15.3 di overhead (spazio temporaneo che il DB utilizza per eseguire delle query).

prima dell'ottimizzazione

Dopo l’ottimizzazione ho ottenuto 33 tabelle, 59.526 records, dimensione dei dati pari a 21 MiB, 4 per l’index e 0 di overhead.dopo-ottimizzazione

Ecco il confronto:risultato-finale-ottimizzazione

La dimensione complessiva del DB si è ridotta del 55%!

Il tempo di caricamento della homepage e degli articoli misurato con pingdom è rimasto quasi invariato (è difficile calcolarlo con questo strumento perchè fornisce risultati variabili ad ogni test).

Perciò ho utilizzato il seguente codice (inserito alla fine del footer.php) per rilevare il numero di query effettuate ed il tempo impiegato:

[php]
<!– <?php echo get_num_queries(); ?> queries in <?php timer_stop(1); ?> seconds. –>
[/php]

Questo è il risultato finale:

Risultato finali in tempo e query

Interessante? Sì.

Ho avuto un miglioramento medio di 0.187 secondi, pari al 18%. Se consideri che una pagina potrebbe caricarsi in 3 secondi, allora prima le query avevano un impatto del 34.8% sul tempo di caricamento, ora del 28.6%, con un guadagno ipotetico del 6.2% (ma che non ho riscontrato con pingdom).

Cache

Per concludere, perchè non fare un po’ di cache anche per il database, ovvero salvare i risultati di query frequenti così da non dover interrogare ogni volta il database, velocizzando il tutto.

Per farlo, ho utilizzato il plugin db cache reloaded.

Il risultato mostra che su 44 query (rilevate dal plugin) che venivano effettuate prima, solo 16 sono dirette al DB mentre ben 28 vengono fatte nella cache. Il tempo è sempre lo stesso, ma il Database risulta molto meno stressato, quindi più performante su blog molto visitati.

Risultati con la cache

Il mio consiglio è di utilizzare il plugin W3 Total Cache, che comprende anche la cache del Database (funziona molto bene anche per l’intero blog!), al posto del plugin db cache reloaded che ho utilizzato solamente per effettuare i test.

VUOI CREARE IL TUO SITO O BLOG WORDPRESS?

Scegli uno tra i migliori hosting per WordPress

HOSTING

Scegli uno tra i migliori hosting per WordPress

Hosting

Scegli uno tra i migliori temi WordPress professionali

GRAFICA

Scegli uno tra i migliori temi WordPress professionali

Grafica

Guide e risorse per gestire il sito WordPress a 360°

GESTIONE

Guide e risorse per gestire il sito WordPress a 360°

Gestione
  
con le dita sempre in costante, frenetico movimento sulla tastiera… vengo spesso trascinato e catturato “in rete” per colpa delle mille idee che mi girano per la testa (prima o poi troverò quella giusta)… dal futuro incerto (nonostante una laurea, e chi non lo è?..siamo in tanti!) .. credo fortemente nella condivisione della conoscenza!
12 Commenti
  • Grazie a questa guida ho ridotto le dimensioni del DB del 50% 🙂
    Come sempre mille grazie

  • Io ho sempre utilizzato il plugin WP Cleanfix 🙂
    ed ho sempre avuto un database molto leggero :p

  • Ciao Roberto,

    ti seguo spesso e cerco sempre di ottimizzare il mio sito grazie alle tue indicazioni preziosissime. Ora ho una domanda.

    Non riesco a fare il backup del sito tramite plugin perchè, probabilmente, il servizio hosting non lo permette. Ecco l’errore:

    Checking MYSQL Dump Path …
    MYSQL dump path does NOT exist. Please check your mysqldump path under DB Options. If uncertain, contact your server administrator.

    Checking MYSQL Path …
    MYSQL path does NOT exist. Please check your mysql path under DB Options. If uncertain, contact your server administrator.

    Checking PHP Functions (passthru(), system() and exec()) …
    passthru() disabled.
    system() disabled.
    exec() disabled.

    I’m sorry, your server administrator has disabled passthru(), system() and exec(), thus you cannot use this backup script. You may consider using the default WordPress database backup script instead.

    Come posso ovviare al problema?

    Un saluto e grazie delle guide che ci metti a disposizione!

    • Roberto Iacono

      Ciao Berry,
      sicuramente contatta l’hosting provider e chiedi di abilitarti tutto.
      Altrimenti puoi provare tramite il Plesk o cPanel (se ti è stato messo a disposizione).
      Ciao

  • Ciao Roberto, una informazione.. premetto che di php e db non ne capisco nulla, ho notato che il mio db ha delle tabelle che fanno riferimento a plugin che ho disinstallato parecchio tempo fa.

    Queste tabelle pero sono rimaste nel db. Questo puo essere un motivo reale che rallenta il mio sito internet?

    Grazie.
    Sandra

    • Roberto Iacono

      No, non è sicuramente qualche tabella in più il motivo del rallentamento. Prova a ricercare il problema con pingdom tools. Solitamente il problema principale sta nel server, poi nelle immagini ed infine nei plugin.

  • Buongiorno,

    nonostante ho seguito passo passo questo passaggio:

    //spostare il file wp-content/plugins/wp-dbmanager/htaccess.txt nella cartella wp-content/backup-db/ e successivamente dovrai rinominarlo in .htaccess , ottenendo wp-content/backup-db/.htaccess//

    mi compare ancora l’errore: “Your backup folder MIGHT be visible to the public”

    Sbaglio qualcosa?

    • Roberto Iacono

      Hai provato a cancellare la cache? I passaggi che hai fatto sono giusti.

      • Update: Tutto ok!!! Mia distrazione 🙂 Avevo caricato il file .htaccess via ftp nella path dei plugin (wp-db-backup) invece poi seguendo con attenzione, in wp-content ho trovato la cartella backup-db ed ho risolto. Grazie 🙂

  • Ciao, ho seguito la procedura ma non riesco a capire perché il db wp_postmeta sia di 101 mb ………fino a pochi mesi fa tutto il DB era impiegato per 70 dei 100mb disponibili, adesso mi trovo a sforare di ben 81 mb ……….non so che fare, se posso fare qualcosa prima di acquistare altro spazio.

  • Buonasera, nel vano tentativo di risolvere un problema coi permalink (permalink finder ha trovato fino ad adesso 9000 link con errore 301…) e siccome ho anche un problema al feed rss, ho letto che potesse dipendere da 2 file .htaccess. Bene ne ho uno nella root principale del sito, ed uno nella cartella wp……..ho rimosso quello nella cartella wp, e le visite si sono quasi azzerate. Non so dove sbattere la testa !