Praktická ukázka: Pomalá administrace WordPress

  Chyby a problémy

V dnešní ukázce se podíváme na jednu pomalou administraci WordPress. Zatímco díky cachování se stránky načítají pod vteřinu, tak administrace je neskutečně pomalá. Zvláště nástěnka lapá po dechu i několik desítek vteřin. Cílový WordPress byl nainstalován před několika lety, nachází se na něm několik stovek příspěvků a přes tisíc komentářů. Také na něm jede 21 pluginů, včetně několika velice náročných. Majitel údajně nic s webem nedělal, prostě začalo to zničehonic. Spousta lidí by řeklo, že problém je na webhostingu, vyměňte jej za jiný. Jenomže nejsme žádní amatéři, abychom tak rychle udělali chybný závěr.

Zjistíme co WordPress zpomaluje pomocí Query Monitor

Pokud se setkáme se zpomalením o více jak 10 vteřin většinou za to mohou dvě věci. Buď se zadýchává databáze anebo se protahuje komunikace s externím zdrojem. Obojí je problém. Abychom zjistili, co se vlastně děje použijeme plugin Query Monitor. Tento plugin monitoruje úplně vše, co se děje při generování stránky. Zjistíme vše potřebné. Ovšem doporučuji jej zapínat jen pro debugování.

Jakmile jej nainstalujete a aktivujete, tak v horní části lišty administrace uvidíte informace: jak dlouho se stránka generovalakolik spotřebovala pamětikolik zabraly SQL dotazy a celkový počet SQL dotazů. Po rozkliknutí se otevře menu, které vás upozorní na případné problémy. Můžete na ně kliknout a posunete se na konec stránky, kde jsou jednotlivé problémy rozepsané.

Query-Monitor-nasel-problem
19,36 vteřiny? Tato administrace WordPress je opravdu pomalá.

Čas podívat se na pomalé SQL dotazy

V našem případě máme před sebou hned několik problémů. Stránka se generuje 19,36 vteřin a z toho 18,24 připadá na dva SQL dotazy. Což jsme tak nějak předvídali. Klikneme tedy na Slow Queries (2) a podíváme se na ně.

Query-Monitor-nasel-problem-slow-queries
Query Monitor označuje za pomalé všechny SQL dotazy, které se vykonávají déle jak 0,05 vteřiny.

yto neskutečně pomalé dotazy patří pluginu WordFence. Zkoušel jsem se podívat na MySQL tabulky, ale nevypadají nijak problémově. Jsou poměrně malé, mají klíče. Zkoušel jsem i dohledat problém pomocí Google a nic nenašel. Řešením by bylo tedy WordFence vypnout. Vzhledem k tomu, že se však tento problém děje jen na Nástěnce a nikde jinde, tak mi přišlo vhodnější prostě všechny widgety WordFence vypnout (Nastavený zobrazovaných informací – odškrtnout checkbox).

Po vypnutí se vše dalo pěkně do pohybu, chvilku jsem proklikal administraci a všiml, že má WordPress stále pár problémových SQL dotazů.

Query-Monitor-nasel-problem-pomaly-wp-options
wp_options je jedna z nejvíce využívaných tabulek

Tento problém dobře známe. Jedná se o velké množství transient v databázi. V jednom z předchozím článku (Pomalá databáze WordPress – problém s transient) jsme si o nich řekli více, včetně toho jak se s nimi poprat. Takže šup a hned je wp_options 85 % řádků lehčí 🙂

query-monitor-cisteni-transient

Když jsem procházel tabulky zjistil jsem, že většina dat je uložených v tabulkách MyISAM. Ty se používaly v předchozích instalacích WordPress. Dnes už se při instalaci vytváří InnoDB. Rozdíl je v práci s tabulkami pokud se něco přepisuje. Zatímco u MyISAM se celá zablokuje (zakáže se v ní upravovat) po dobu práce, tak u InnoDB se se zablokuje jen daný řádek. U WordPress je to celkem znát. Věřím, že i tohle vedlo k lepším výsledkům.

A teď pomalé HTTP Requesty

Tím že přistoupíte do administrace rozjedete hned několik procesů, které začnou něco dělat. Takže s tím chce počítat a prostě se smířit s tím, že administrace bude vždy pomalejší. I když všechno jde řešit, ale o tom někdy jindy 😉

Co je třeba zkontrolovat jsou HTTP Requesty. V některých případech se totiž může nějaký plugin snažit spojit se serverem a získat data. Tento server nemusí reagovat a tak se načítání neuvěřitelně protáhne. Zvláště když je server přetížení a váš plugin si stahuje větší objem dat. Tohle může mít vliv na celou instalaci. Chybně napsaný plugin začne stahovat přes několik vláken a vyčerpá přidělené zdroje a hned tu máte chybu 503.

I na tohle dokáže Query Monitor přijít. Stačí kliknout na HTTP Requests a podívat se, co se snaží s čím komunikovat. Například plugin WordFence se snaží spojit s api.wordpress.org. Ověření verze mu trvá 0,8 vteřiny a zjištění aktualizace 1 vteřinu. Dávejte si pozor na sloupec Timeout. To je doba ve vteřinách po které to má přestat zkoušet. Pokud by tam měl třeba 30, tak by v případě problémů na straně serveru čekal půl minuty. Po celou tuto dobu by se administrace nahrávala.

Query-Monitor-nasel-problem-http-requesty

Ještě jedna maličkost

Query Monitor také ukazuje kolik si toho můžete na vašem webhostingu dovolit a jak blízko jste hranicím. Je to sice jen taková maličkost, ale alespoň se dozvíte jak na tom jste oproti tomu, co webhsoting slibuje 🙂

Query-Monitor-nasel-problem-celkovy-cas
308 SQL dotazů, majitel by se měl zamyslet nad počtem používaných pluginů 🙂

A co ten zbytek?

Zůstávají nám tam PHP varování, duplicitní SQL dotazy a spousty dalších věcí, které mohou ukazovat na další velké problémy. Ty zkusíme vyřešit v některém z dalších praktických ukázkách.

Napiš komentář