Hogyan optimalizáljuk Wordpress honlapunk teljesítményét?


wordpress-maintenance1

  Számos partnerünk használ WordPress blog motort, ami nem csoda, hiszen a nemzetközi kimutatások alapján ez az egyik legelterjedtebb ingyenes blog engine. Egy bizonyos látogató szám elérése után azonban nem ritka, hogy sebesség problémák jelentkeznek, amelyek sokszorozódnak ha  esetleg nem jól tesztelt plugin-t telepítünk fel.

  Az egyik legfőbb probléma a MySQL adatbázis indokolatlan terhelése még akkor is, ha valamilyen cache megoldást már telepítettünk. Az adatbázis log elemzését követően gyorsan kiderül, hogy a számos lekérdezés mögött egyetlen select utasítás áll, ami a konfigurációs paramétereket olvassa. Ez a select gyakorlatilag minden szerverünkön a legtöbbet futtatott sql művelet, naponta átlagosan több mint 750.000 - szer fut le.


SELECT option_name, option_value FROM wp_options WHERE autoload = 'S'


Egy gyors, tíz perces időszak elemzése után ez az eredmény születik az egyik szerverünkön:



Count: 16328 Time=0.03s (568s) Lock=0.03s (458s) Rows=385.4 (6292345), 137users@localhost



 

Az elemzés ideje alatt a lekérdezés 16.328-szor futott, ez összesen 568 másodpercig tartott, ebből 458 másodpercig zárolta a táblát, és a lényeg: eredményül 385 sort adott vissza amihez 6.292.345 sort vizsgált át!

 

A gyors megoldást egy index elhelyezése jelenti a wp_options táblán:


create index idx_autoload using hash on wp_options (autoload(3))


 

Ha az index létrehozása után elemezzük a lekérdezést a MySQL beépített Explain parancsával, akkor már látható, hogy használni fogja az indexet:

explain extended SELECT option_name, option_value FROM wp_options WHERE autoload = 'yes'

id select_type table type possible_keys key key_len ref rows Extra

 1 SIMPLE wp_options ref idx_autoload idx_autoload 11 const 1670 Using where


Ha szerverünkön kíváncsiak vagyunk, hogy ki az a felhasználó akinek létre kéne hoznia ilyen indexet, akkor az alábbi utasítással könnyedén lekérdezhetjük:

grep -B 3 "SELECT option_name, option_value FROM wp_options" \

/var/lib/mysql/slow_queries.log | grep "User" | sort | uniq -c| sort -n | less



Ez a válasz segített? 4 Felhasználók, akik ezt hasznosnak találták (6 Szavazatok)