Dneska jsem si pro vás připravil výsledky jendoho velice zajímavého test, který ukáže jak rychlé a optimalizované databáze jednotlivé hostingy mají. Bohužel se u něj nedá vyhnout srovnání, protože je postaven na číslech z pravidelně prováděných benchmarků. Proto jsem se rozhodl je zveřejnit.
Cílem tohoto testu bylo po dobu 30 dní v pravidelných intervalech testoval jak rychlá je databáze webhostingů. Měřilo se jak dlouho trvá udělat 1000 SQL dotazů INSERT, SELECT, UPDATE a DELETE na WordPresst tabulku wp_options. Toto měření prováděl můj plugin, který je na všech testovacích webech stejný. O rychlosti tak rozhodoval hlavně hardware a velký vliv mělo i zdali je databáze lokálně anebo přes síť.
Proč tabulka wp_options a SELECT
Ve WordPress má tabulka wp_options velmi důležitou roli. Samotný WordPress, pluginy i šablony si do ní ukládají své nastavení. Může se jednat o stovky anebo i tisíce záznamů. Ačkoliv svou strukturou není nijak složitá a databáze s ní dokáže pracovat velice rychle, jedná se často o nejvytíženější tabulku. Proto jsem se na ní při těchto testech zaměřil.
Jen pro představu cn130.com pro zobrazení necachované úvodní stránky provede 80 SQL dotazů, z toho 28 je provedeno na wp_options, tedy 35 %.
19 dotazů bylo SELECT (čtení dat z tabulky). Počet dotazů SELECT na DB server za posledních 177 dní, kdy jede bez restartu, je 70 %.
Právě proto jsem vybral pro benchmark právě tabulku wp_options a SELECT.
Benchmark
Můj benchmark jsem postavil na původním testu databáze z WP Benchmark, který je starý více jak 7 let a pro dnešní dobu se už nehodí. Myšlenka byla velice jednoduchá, ale provedení se mi úplně nelíbilo. Původní test totiž nebral v potaz jednotlivé druhy dotazů, ale výsledek počítal z celkového času všech. Dnes už jsou databáze optimalizované pro jednotlivé úkony nikoliv univerzálně. Vše jsem si tedy přepsal s důrazem na to, aby se vše dělalo přes připravené funkce WordPress.
Jak má verze testuje:
- Vytvoří se řetězec 446 znaků Lorem Impsum.
- Tento řetězec se 50x spojí. Celkem tak vznikne 22.300 znaků.
- Vytvoří se unikátní název pro hodnotu option_name
- Pro option_value se použije vytvořený řetězec
- Provede se postupně 1000 samostatných iterací následujících úkolu:
- Do databáze se vloží přes wpdb->insert option_name a option_value
- Z databáze se vytáhne hodnota option_name přes wpdb->get_var
- Upraví se data option_value přes wpdb->update
- Smažou se postupně po jednom řádky přes wpdb->query
- Každý část se samostatně měří.
- Přepočte se kolik INSERT, SELET, UPDATE a DELETE zvládne databáze za 1 vteřinu.
Množství iterací bylo zvoleno tak, aby zbytečně nezatěžovalo hosting a přitom poskytlo dostatek výsledků.
Popravdě jsou sdílené webhostingy, které by snesou i 10x tolik a nikdo by si toho ani nevšiml, ale bylo třeba myslet i na ty ostatní 🙂
Testování
O testování se staral samotný WordPress přes wp_cron(). Jen jsem si musel vytvořit akci aby testoval každých 10 minut. Vzhledem k tomu, že jsou testovací weby monitorované kvůli dostupnosti, tak k wp_cron docházelo ke spouštění pravidelně.
Pro účely testu jsem vzal data za posledních 30 dní, což odpovídá 47.366 měření. Rozdíly v počtu měření jsou způsobené výpadky, problémy s databázi, konektivitou, případně manuálním spuštěním testu (odesílají se všechny testy). Ideální počet testů by měl být 4320, ale vzhledem k tomu, že test neprobíhá přesně každých 10 minut, tak tohoto čísla nelze dosáhnout.
Hosting | Doména | Počet měření |
WEDOS | badrequest.eu | 4314 |
FORPSI | connectionfailed.eu | 4313 |
ACTIVE 24 | connectiontimedout.eu | 4217 |
Web4U | expectationfailed.eu | 4254 |
Savana | gatewaytimeout.eu | 4317 |
ONEbit | generalfailure.eu | 4310 |
Gigaserver | internalservererror.eu | 4314 |
Station | requesttimeout.eu | 4378 |
Nethost | serviceunavailable.eu | 4315 |
TELE3 | unknownerror.eu | 4317 |
EBOLA | webserverisdown.eu | 4317 |
Celkem | 47366 |
Před začátku testování byla použita poslední verze PHP, kterou hosting nabízel (pokud jsem našel), a všechny WP byly aktualizovány na stejnou verzi. Výsledky jsou tedy postaveny z 47.366.000 SQL dotazů 🙂
Vyhodnocení
A jedme rovnou na pořadí jednotlivých webů, tak jak mi k uzavření měření vyšly. Graf ukazuje kolik v průměru zvládne WordPress SQL dotazů SELECT za vteřinu.
- Zeleně jsou hostingy, které dokáží udělat nad 5K SELECT za vteřinu. Z mého testování je to srovnatelné s VPS anebo hostingem s vyhrazenými zdroji. Nutno podotknout, že všechny hostingy v této kategorii mají databáze lokálně. Což přináší výhody v rychlosti ovšem když se to pokazí i řadu nevýhod. To by bylo spíše na samostatný článek.
- Světel zeleně jsou hostingy s 2K+. Musím podotknout, že toto jsou na sdílený webhosting opravdu nadprůměrné hodnoty. Obecně databáze u těchto hostingů úzkým hrdlem nebudou.
- Žlutě jsou hostingy 1K+. Tyto hostingy podaly slušný výkon. Nejde to říct takto obecně, ale databáze na nich by mohly utáhnout bez problémů 10 – 20 návštěv za vteřinu. Samozřejmě v reálu to dokáže zabít třeba jeden neoptimalizovaný SQL dotaz, který se rozhodne hledat mezi tabulkami podle sloupců bez indexu 🙂
- Oranžově jsou ty ostatní.
Pořadí
V následující tabulce jsou hostingy seřazeny podle průměrného množství SQL dotazů za vteřinu.
Kde | Doména | Počet měření | SELECT | |
🇱 | Nethost | serviceunavailable.eu | 4315 | 7033 |
🇱 | TELE3 | unknownerror.eu | 4317 | 5785 |
🇱 | Gigaserver | internalservererror.eu | 4314 | 5286 |
🇱 | Savana | gatewaytimeout.eu | 4317 | 2877 |
WEDOS | badrequest.eu | 4314 | 2483 | |
ACTIVE 24 | connectiontimedout.eu | 4217 | 1384 | |
EBOLA | webserverisdown.eu | 4317 | 1251 | |
Station | requesttimeout.eu | 4378 | 1235 | |
FORPSI | connectionfailed.eu | 4313 | 1220 | |
Web4U | expectationfailed.eu | 4254 | 887 | |
🇱 | ONEbit | generalfailure.eu | 4310 | 723 |
🇱 Předpokládám lokální DB (na stejném fyzickém stoji) – interní IP adresa DB serveru je shodná s IP adresou hostingu, případně je 127.0.0.1
Je to hodně anebo málo?
Rychlost databáze nejvíce poznáte na stránkách, kde se nepoužívá cache a pracuje s velkým množstvím dat. Například nástěnka administrace WordPress. Na začátku článku jsem zmínil úvodní stránku cn130, kde proběhne 80 SQL dotazů. Nástěnka administrace WordPress vyžaduje 167 SQL dotazů. V přepočtu na čísla je 0,24 vteřiny vs 0,32 vteřiny. U spousty dotazů si však může DB vypomoct vlastní cache, takže tato čísla se mohou lišit o desítky procent.
Ve většině případů používáte nějakou formu cache vygenerovaných stránek, takže množství potřebných SQL dotazů je zredukováno z desítek na jednotky anebo dokonce žádný. Osobně jsem tak dokázal provozovat web s desítkami návštěvníků online na DB serveru co dokázal nižší stovky SQL dotazů za vteřinu. Ten web mi nakonec návštěvníci rozbít nedokázali. Udělal to robot, který se začal tahat nechachovaný obsah. Zvládl by to pokud by DB zvládala 10x anebo 50x více? Těžko říct. Úzkým hrdlem často není databáze.
Množství SQL dotazů, které DB zvládne je tedy spíše otázkou webů, které nechtějí obsah cachovat. Umím si představit například nějaké vyhledávání v obsahu podle specifických kritérii. Tam pak databáze může opravdu dostávat hodně zabrat.
Nezapomínejme také, že se o databázi dělíte. Nemůžete si tedy celý její výkon přisvojit jen pro sebe. Valit tam nonstop čísla jako v testu by asi brzy znamenalo omezení vašeho webu. Tato čísla by tedy měla spíše ukázat, kolik toho v nejhorší špičce webhosting krátkodobě utáhne. Například když se vám povede nějaký virální článek anebo omylem utratíte v jeden okamžik hodně za reklamu.
Globální statistiky jen pro zajímavost
Pokud bychom sečetli výsledky všech webhostingů, tak nám celkem vyjde následující teplotní mapa. Na ní vidíme jak moc jsou databáze zatížené v jednotlivých hodinách. Je vidět obrovský rozdíl mezi pohodovým víkendem a třeba pondělím zatížením webů. Nejpomalejší jsou databázové servery v pátek od 8:00 do 9:00. To je krizový den 🙂
Závěr
Přiznám se, že mě samotného velice překvapily rozdíli mezi jednotlivými webhostingy. U lokálních databází jsem hodnoty čekal vyšší ale ne až o tolik. Že tu budeme mít někoho kdo dá přes 5K jsem fakt nečekal 🙂 Ostatně to je ten pocit z rychlejších webů, když přejdete ze sdíleného řešení na vlastní server. Není to jen o vyhrazených prostředcích, ale i tom že všechno se řeší v rámci jednoho serveru.
Teď provedu aktualizaci všech WordPress webů na 5.3 a připravím je na další testování. Přemýšlím jestli budu dělat nějaký benchmark, který otestuje rychlost procesorů/PHP anebo zůstaneme ještě chvíli u databází. Bylo by jistě zajímavé vybrat nějaké náročnější SQL dotazy, které se občas objeví a zkusit za jak rychle je jednotlivé webhsotingy zvládnou. Třeba by pořadí vypadalo jinak 😉
- Savana Hosting slevový kupón - SlevyNaHosting.cz
Koukám že jsem byl minule na Wedos asi trochu tvrdší. Je pravda že ty nové servery šlapou pěkně za poslední rok se rychlost databáze zlepšila. Sami jsme dělali nějaké benchmarky, kam dávat zákazníky co potřebují velké Wordpresy a Wedos to tehdy vyhrál spíše kvůli procesorům. Jak jste psal když se umí používat cache, tak na databázích tolik nezáleží, ale rychlost webserverů a PHP je stále znát. Ještě všude udržet tu dostupnost 99,99 procent a je to jedna z nejlepších sdílených služeb bez ohledu na ceny.
Mě se Ebola za poslední měsíc trochu zhoršila. Vím že to je server od serveru, ale nemůžeš kouknout do databáze jestli se to začátkem listopadu nějak nezhoršilo? Jinak moc fandím že publikuješ čísla. Snad tu článek zůstane 🙂
Mám vývoj měření za posledních 30 dní (včetně dneška). Nezdá se mi, že by tam byl nějaký velký rozdíl. Jede víceméně stabilně. Z hodinové heatmapy je vidět asi zálohování, možná CRONy, vždy v noci od 00:00 – 2:00. Na to jediné bych si dal pozor.
Tak to není můj problém, ale cron posunu na třetí ráno.
Pokud máte nějaký náročnější cron, který chcete vykonat rychle, napište nám prosím na podporu skrze určení vhodného času, dle toho co chcete provádět. V noci probíhá spousta úloh na naší straně, které výsledek ovlivní. Také klienti si nejvíce úloh naplánují například na půlnoc a potom je to znát.
To ti stále jede na té problémové hc1-wd50 anebo jsi si to nechal přesunout jinam?
Ne stále to mám na hc1-wd50. Testovací webhosting takto vyšel, tak to nechci měnit. Měl jsem nabídky migrace i u jiných společností (lepší tarify k otestování), ale budu tam kde mi to automaticky zřídili ať je to fér 🙂
Databáze jsou ale jinde, předpokládám že se více serverů dělí o jeden databázový. Ten můj je md50.
Wedos přešel z pomalých úsporných procesorů vhodných maximálně na úložiště na rychlé 3,7 Ghz procesory. Do serverů nacpali značkové serverové SSD přes NVME. Jednotlivé servery jsou v jedné serverové bedně, rozhodně to netahají mezi racky jak se běžně dělá. Jedna ta serverová bedna včetně serverů a dalšího hardware stojí stovky tisíc euro. Pokud by nebyli na předních místech v tomto testu, tak by to museli být naprosí amatéři a diletanti.
Já jsem za Savanu spokojený. Je vidět že jsou jedním z nejlepších webhosting a dobře jsem si vybral. I tak mě ale zaráží že neznámé značky jako nethost, tele3 anebo gigaserver jsou o tolik lepší. Web mi jede dobře už druhým rokem, až na jeden problém si nemám na co stěžovat, ale i tak mě láká je zkusit. To ty lokální databáze dělají takový neskutečný rozdíl?
Oni nedělají moc sdílený webhosting a neinvestují tolik do reklamy na něj. Ale třeba TELE3 je hodně známé jméno. Mají takový svůj zvláštní přístup a jedny z top reklamních banerů. Nejedné feministce by z toho praskla žilka. Zkus dohledat na Google Images.
Díky za rozumné a objektivní testy i když nám tam visí 7 minut kumulativního výpadku, přeci jenom máme zásadu nepřesouvat ty domény někam jen kvůli testu a současně musíme dodržet aktualizační kolečko a držet servery aktuální.
Co se týče lokálních databází tak jsou prostě rychlejší, manipulace systému se socketem a síťově je prostě jinde. Navíc si to php drží trvale lokálně a nevznikají permutace webxsql pokaždé fyzicky jinde. heatmapa je fajn nicméně 2-4 je fullbackup, tam dostává typicky databáze dost na prdel.
Jen ty domény by měli být tajné, to je imho největší slabina celé metodiky. To bych klidně i podpořil křížově na platbu hostingu jinde (byť u konkurence), lokálně to těžko řešit když pro webhosting používáme 100+ serverů, to je imho druhá a jediná slabost metodiky tj že porovnává celek dle jednoho webu. Objektivně uznávam ale že to je definováno již na začátku že je to prostě náhodně web a je to srovnání těch individuálních webhostingů ne celých firem, a je to součást ceny (u nás varianta za 25kč/měs).
Ať se daří, pokud se podaří najít vhodný (byť syntetický) test co měsíc nezbývá než poděkovat. Každý feedback posouvá/tlačí firmy dopředu, zvlášť když je to takovej moloch jako WP.
Děkuji za komentář.