Baza de date WordPress (MyISAM) este lentă, ar trebui să trec la InnoDB?

24 feb. 2011, 13:34:44
Vizualizări: 15.3K
Voturi: 16

Am un site WordPress cu peste 10k articole, iar lucrurile încep să devină foarte lente atunci când adaug sau editez articole. Paginile se încarcă rapid pentru utilizatori, la fel și listele de articole din administrare, dar când apar operațiuni de scriere sau actualizare, serverul ajunge la 100% CPU și durează mult (uneori mai mult decât timeout-ul PHP de 60s).

Cred că aceasta este legată de blocarea la nivel de tabel a MyISAM și mă gândesc să trec la InnoDB. Care sunt implicațiile acestei schimbări?

Câteva statistici:

select  - pe oră ~22k
update  - pe oră ~7.6k
set option  - pe oră ~7k

Știu că există multe alte optimizări pe care le pot face, dar simt că aceasta ar putea avea cel mai mare impact.

Mulțumesc

Editare: Am descoperit una dintre problemele majore care cauza încetinirea, era YARPP (Yet Another Related Posts Plugin) care regenera "asemănarea" de fiecare dată, iar acest lucru părea să fie din cauza celor peste 2k de etichete pe care le avem. Am dezactivat opțiunea "consideră etichetele" și viteza s-a îmbunătățit considerabil.

De asemenea, alte pluginuri care regenerează conținut pot cauza astfel de probleme, cum ar fi unele pluginuri pentru hărți XML de site.

Așadar, problema mea imediată este rezolvată, dar aș dori totuși să aud un răspuns bun la întrebarea InnoDB vs MyISAM pentru WordPress!

0
Toate răspunsurile la întrebare 2
3
14

Eu, fără îndoială, aș trece la InnoDB. Blocarea tabelelor/blocarea rândurilor a fost dezbătută pe larg de mulți. Aș alege întotdeauna InnoDB fără ezitare. Cu toate acestea, există un alt motiv profund pentru a alege InnoDB...CACHING-ul.

În timp ce majoritatea oamenilor laudă faptul că MyISAM este mai rapid la citiri, mulți uită că memoria cache pentru MyISAM, numită key cache (setată prin key_buffer_size), stochează doar paginile de index din fișierele .MYI. Nu stochează niciodată paginile de date. Are un maxim oficial de 4GB pe sistemele 32-bit. 8GB este maximul recomandat pentru sistemele 64-bit.

Buffer Pool-ul InnoDB stochează atât paginile de date cât și cele de index. În funcție de serverul pe care îl ai, poți stoca în RAM întregul set de date. Poți configura InnoDB să utilizeze până la 80% din RAM, 10% pentru conexiunile la baza de date și să lași 10% pentru sistemul de operare. Acest lucru este valabil chiar și pentru diferite sisteme de operare.

Am recomandat aceste lucruri pentru clienții Drupal cu un succes remarcabil. Se aplică la fel de bine și pentru Wordpress. Am oferit suport pentru baze de date clienților cu WordPress. Aceleași îmbunătățiri.

Poți mereu să configurezi memoria pentru InnoDB mult mai eficient decât poți pentru MyISAM. Există întotdeauna o modalitate de a ajusta InnoDB pentru a se potrivi nevoilor tale de performanță. Pe măsură ce datele tale cresc, va ajunge inevitabil să devină o cerință.

22 apr. 2011 05:19:59
Comentarii

Are legate aceste lucruri și pentru noi, simplii muritori, care avem hosting partajat, cu fișierele pe un server și baza de date pe altul, iar furnizorul nostru de hosting este cam ambiguu în privința resurselor pe care le avem la dispoziție? Noi optimizăm serverul din scripturile noastre sau de fapt optimizăm serverul în sine?

pathfinder pathfinder
11 iun. 2022 07:38:32

Cu siguranță, aceste lucruri se aplică și în cazul vostru. Puteți obține o imagine mai realistă a resurselor prin cunoașterea limitelor impuse de hosting-ul partajat. În acest context, îmbunătățirea performanței bazei de date ar necesita o conversie planificată o singură dată pentru a reorganiza utilizarea resurselor de către MySQL, mai degrabă decât a scala resursele sistemului de operare.

RolandoMySQLDBA RolandoMySQLDBA
11 iun. 2022 14:12:28

Mulțumesc @RolandoMySQLDBA. Am aprofundat câteva dintre linkuri și exact asta am făcut. A meritat efortul. Am obținut o îmbunătățire semnificativă a vitezei :)

pathfinder pathfinder
12 iun. 2022 16:11:48
0

InnoDB probabil nu vă va ajuta - blocarea la nivel de pagină/rand ajută la atenuarea conflictelor, dar nu pare să fie problema dumneavoastră.

Există multe informații care sugerează că MyISAM este mai lent decât InnoDB în scenariul tipic al unui blog (mult mai multe citiri decât scrieri).

Înainte de a face o schimbare, ar trebui să faceți cel puțin următoarele:

  • rulați mysqltuner care vă va oferi câteva sfaturi de configurare (nu este infailibil sau omniscient totuși)
  • activați înregistrarea interogărilor lente, lăsați-o să ruleze o zi sau două, apoi începeți să analizați jurnalul și să folosiți EXPLAIN pentru interogări pentru a vedea ce se întâmplă

Din experiența personală, am descoperit că adăugarea unui index pe un câmp neindexat din wp_comments a ajutat enorm în situația mea specifică (perioade de comentarii intense, când 10 sau mai mulți oameni încercau să comenteze în același timp), și este posibil ca identificarea interogărilor lente și a motivului pentru care rulează lent să vă conducă la o înțelegere mai bună a problemei și la o SOLUȚIE ADEVĂRATĂ!

2 mar. 2011 12:23:35