Database WordPress (MyISAM) è lento, dovrei passare a InnoDB?

24 feb 2011, 13:34:44
Visualizzazioni: 15.3K
Voti: 16

Ho un sito WordPress con oltre 10k articoli e le operazioni stanno diventando molto lente quando aggiungo o modifico post. Le pagine si caricano velocemente per gli utenti e anche le liste dei post nell'admin, ma quando avvengono operazioni di scrittura o aggiornamento il server va al 100% della CPU e impiega molto tempo (a volte più del timeout PHP di 60s).

Penso che questo possa essere dovuto al table locking di MyISAM, e sto valutando di passare a InnoDB. Quali sarebbero le implicazioni di questa operazione?

Alcune statistiche:

select  - per ora ~22k
update  - per ora ~7.6k
set option  - per ora ~7k

Sono consapevole che ci sono molte altre ottimizzazioni possibili, ma credo che questa potrebbe avere l'impatto maggiore.

Grazie

Aggiornamento: Ho trovato uno dei principali problemi che causavano la lentezza, era YARPP (Yet Another Related Posts Plugin) che rigenerava i "post correlati" ogni volta, probabilmente a causa dei 2k+ tag che abbiamo. Ho disattivato l'opzione "considera tag" e le prestazioni sono migliorate notevolmente.

Anche altri plugin che rigenerano contenuti possono causare questi problemi, come alcuni plugin per le sitemap XML.

Quindi il mio problema immediato è risolto, ma mi piacerebbe comunque sentire una buona risposta sul confronto tra InnoDB e MyISAM per WordPress!

0
Tutte le risposte alla domanda 2
3
14

Sicuramente passerei a InnoDB. Il blocco delle tabelle/righe è stato a lungo discusso da molti. Sceglierei sempre InnoDB senza esitazioni. Tuttavia, c'è un'altra ragione profonda per scegliere InnoDB...LA CACHE.

Mentre la maggior parte delle persone vanta che MyISAM sia più veloce per le letture, molti dimenticano che la cache principale di MyISAM, chiamata key cache (impostata da key_buffer_size), memorizza nella cache solo le pagine degli indici dai file .MYI. Non memorizza mai nella cache le pagine dei dati. Ha un massimo ufficiale di 4GB nei sistemi a 32-bit. 8GB è il massimo consigliato per i 64-bit.

L'InnoDB Buffer Pool memorizza nella cache sia le pagine dei dati che degli indici. A seconda del server a disposizione, è possibile memorizzare nella cache RAM l'intero dataset. È possibile ottimizzare InnoDB fino all'80% della RAM, riservare il 10% per le connessioni al DB e lasciare il 10% al sistema operativo. Questo vale anche per diversi sistemi operativi.

Ho consigliato queste soluzioni a clienti Drupal con risultati straordinari. Si applica altrettanto bene a Wordpress. Ho fornito supporto al database per clienti con WordPress. Stessi miglioramenti.

È sempre possibile configurare la memoria per InnoDB in modo più efficace rispetto a MyISAM. C'è sempre un modo per ottimizzare InnoDB in base alle proprie esigenze di prestazioni. Man mano che i dati crescono, alla fine diventerà un requisito necessario.

22 apr 2011 05:19:59
Commenti

Tutto questo riguarda anche noi poveracci che abbiamo un hosting condiviso, con i file su un server e il database su un altro, e il nostro host è un po' ambiguo riguardo alle risorse che abbiamo a disposizione? Stiamo ottimizzando il server dai nostri script o stiamo davvero ottimizzando il server?

pathfinder pathfinder
11 giu 2022 07:38:32

Assolutamente sì, tutto questo si applica perfettamente. Puoi avere una visione più realistica delle risorse conoscendo i limiti imposti dall'hosting condiviso. Alla luce di ciò, migliorare le prestazioni del database richiederebbe una conversione pianificata una tantum per riorganizzare l'uso delle risorse da parte di MySQL, piuttosto che aumentare le risorse del sistema operativo.

RolandoMySQLDBA RolandoMySQLDBA
11 giu 2022 14:12:28

Grazie @RolandoMySQLDBA. Ho approfondito alcuni dei link e ho fatto proprio così. Ne è valsa davvero la pena. Ottimi guadagni in velocità :)

pathfinder pathfinder
12 giu 2022 16:11:48
0

InnoDB probabilmente non ti aiuterà - il blocco a livello di pagina/riga aiuta a mitigare la contesa, ma non sembra che questo sia il tuo problema.

C'è molta documentazione che suggerisce come MyISAM sia più lento di InnoDB nello scenario medio di un blog (molte più letture che scritture).

Prima di effettuare un cambio, dovresti almeno fare quanto segue:

  • eseguire mysqltuner che ti darà alcuni consigli di configurazione (anche se non è infallibile o onnisciente)
  • attivare il logging delle query lente, lasciarlo attivo per un giorno circa e poi iniziare a setacciare il log e fare EXPLAIN delle query per capire cosa sta succedendo

Per esperienza personale, ho scoperto che aggiungere un indice a un campo non indicizzato in wp_comments ha aiutato enormemente nella mia situazione particolare (periodi di commenti a raffica, dove 10 o più persone potevano provare a commentare contemporaneamente), ed è possibile che scoprire quali query vengono eseguite lentamente e perché possa portarti a una migliore comprensione del problema e a una VERA soluzione!

2 mar 2011 12:23:35