Jak pomocí Query Monitor zjistit proč je administrace WordPress pomalá

Pokud s někým řeším “rychlost WordPress”, kdy už tvrdí že vyzkoušel všechno, tak se nejčastěji jedná o problém s pomalou administrací. U administrace není možné rychlost ošidit nahráním cache. Potřebuje pracovat s aktuálními daty, takže je daleko více náchylná na počet a náročnost pluginů.

Když se bavím o administraci většinou je myšlena nástěnka

Nástěnka se nachází na domena.tld/wp-admin/index.php a má sloužit k zobrazování užitečných informací WordPress. Dostanete se na ní hned po přihlášení. Problém je, že právě zde se postupně nakupí výstupy ze všech nainstalovaných pluginů.

Nástěnka čisté instalace WordPress s PHP 7.4 se načte opravdu rychle a máte z toho radost.

V tomto případě jsem nechal aktivní jen plugin Query Monitor, abychom si mohli změřit jak rychlá čistá instalace je. Používám ho jak na hledání problémů ve WordPress instalacích, tak i na vývoj vlastních pluginů. Je to mocný nástroj i pro začátečníka, protože vás dokáže nasměřovat, kde může být problém. Query Monitor naměřil (vidíte v horní části screenshotu) vygenerování stránky za 0,18 vteřiny. Z toho 0,0094 s na SQL dotazy. Firefox nástroje pro vývojáře potvrdil 275 ms TTFB a 1,28s do úplného načtení. Prostě nádhera.

A jak se tedy stane z těchto super čísel dostaneme na i na několik vteřin?

Náročné SQL dotazy na databázi

Jak už jsem zmínil na nástěnku často dávají vývojáři pluginů nějaké výstupy. Tyto výstupy mohou být i složitější dotazy na databázi, které třeba spojují data napříč tabulkami. Například u pluginů na měření návštěvností se mohou jednat i o tabulky v desítkách či stovek MB. Tohle jsou třeba pomalé SQL SELECT na nástěnce způsobené pluginem SlimStat.

Tento plugin za to ve své podstatě nemůže. Pracuje s obrovským množstvím dat a chvíli trvá než se všechno prohledá. Jak vidíte jedná se o 3 SQL dotazy, které trvají v součtu 0,26 vteřiny. Samozřejmě jako vývojáři bychom mohli spekulovat zdali by nebylo lepší třeba nahrávat data přes ajax a nezpomalovat tím nástěnku. Na druhou stranu nic se nemá přehánět 🙂

Nemusí se ale jednat jen o pluginy, ona i statistika ke komentářům pokud jich máte přes 10 tisíc (včetně spamu), začne být znát.

Naštěstí sdílené webhostingy, minimálně ty v Ultimátním testu webhostingů, mají dobře odladěné databáze, kde je kladen důraz právě na čtení dat. Na druhou stranu zápis (INSERT) a úprava záznamů v tabulkách (UPDATE) mohou být znatelně pomalejší, takže vám administraci může zpomalovat naprosto banálně vypadající dotaz.

Většina uživatelů tomuto nevěnuje pozornost, protože proběhnout při návštěvě jen 1x. Prostě je to ten případ kdy se vám WordPress dlouho načítá, zkusíte dát obnovení stránky a všechno běží. Pokud se jedná o delší časy, tak byste tomu měli věnovat pozornost, protože na první pohled to může vypadat jako “náhodná” věc, ale tabulka nemusí být v “dobré kondici”.

Jak dohledat pomalé SQL dotazy přes plugin Query Monitor

Po nainstalování a aktivaci pluginu Query Monitor hned začne fungovat. Není třeba jej nijak nastavovat. V horním liště se objeví statistiky strany. V prním sloupci je celková doba potřebná k vygenerování stránky, další je spotřebovaná pameť, následuje sloupec s celkovou délkou SQL dotazů a poslední sloupec je celkový počet SQL dotazů. Pokud se statistika podbarví oranžově znamená to, že něco trvá déle než je zdrávo. Když je podbarvení červené, tak je na stránce nějaký problém, který stojí za prozkoumání. V administraci podbarvení berte spíše informativně.

Klikněte na statistiky a objeví se menu s odkazy na různé části monitorování (spíše logu). Pokud svítí, tak klikněte na Slow Queries.

V spodní části obrazovky se vám objeví vývojářské nástroje, kde uvidíte seznam SQL dotazů, detaily k nim (odkud byly zavolány) a jak dlouho trvalo jejich zpracování.

Podle Caller poznáte který plugin SQL dotaz zavolal. V případě že se jedná o desetiny vteřin, tak to nemá moc cenu řešit. Pokud by však čas šel do vteřin anebo by vás to prostě otravovalo, tak není nic jednoduššího než výstup pluginu z nástěnky odstranit.

Čekání na servery třetích stran

Pluginy které si nahrajete do WordPress mohou a často i komunikují se servery třetích stran. Technicky si mohou posílat jakékoliv informace oběma směry. Většinou se k tomu používá HTTP API.

Querry monitor dokáže zaznamenat a logovat tuto komunikaci. Najdete jí pod HTTP API calls.

Výsledné volání vypadají následovně:

V URL (zelený rámeček) vidíte adresu která byla zavolána. V našem případě se volá api.wordpress.org. Detaily spojení získáte když kliknete na modré tlačítko s +. Pak se vám objeví v status (červený rámeček) detail komunikace. Důležitý je vrácený stavový kód. 200 znamená že komunikace proběhla bez problémů. Jsou k ní i nějaké statistiky, z kterých můžeme vyčíst například problém s rychlostí. Celková doba komunikace a zpracování a je úplně v pravém sloupci Time. Pozor byste si měli dávat na hodnotu Timeout (fialový rámeček). Ta určuje jak dlouho se má pokoušet o spojení, než to vzdá.

To může mít dva potenciální. Pokud budete mít problém s připojením, tak hodnota 3 by nemusela stačit. Naštěstí datacentra jsou přes propojené celkem dobře. Naopak pokud by ta hodnota byla třeba 10 a cílový server by měl nějaký problém – třeba by spadl anebo byl pod silným DDos útokem, tak vám to může zpomalit načítání webu právě o hodnotu timeout.

Na nástěnce tedy můžete mít něco, co se snaží zavolat domů ale nemůže.

Jinak zábavné třeba je, když se po delší době přihlásíte do administrace a domů se snaží dovolat hned několik pluginů naráz.

Závěr

Samozřejmě že tímto to nekončí. Query Monitor dokáže odhalit i další problémy, které na první pohled nemusíte vidět. Za zmínku určitě stojí potlačené chyby a varování PHP (PHP Errors). Pokud plánujete přechod na vyšší verzi PHP, tak právě tato funkce může být naprosto klíčová a ušetřit vám spousty starostí. To ale můžeme probrat třeba příště 🙂


Jak bude reklama vypadat?
-
Nechceš zde reklamu napořád jen za 60 Kč?
Zobrazit formulář pro nákup

4 komentáře

  1. Vím že ten plugin doporučuješ často, ale nikdy jsem jej neviděl v akci. Teď si mě donutil jej vyzkoušet a hodně mě to překvapilo. Rozhodně jsem za další návody jako je tento. Třeba jak píšeš s tím přesunem na vyšší verzi PHP. WordPress už mi hlásí, že chce vyšší verzi, ale zatím se mi do toho nechce kvůli starším pluginům.

  2. Děkuji za pěkný tutoriál. Už se těším až rozšíření vyzkouším. Jen bych tě chtěl poprosit jestli by nešlo ty obrázky udělat větší.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.