← Zpět na všechny články blogu

Jak zrychlit databázi – praktický průvodce pro rychlejší web

Iveta Zlatníčková
Iveta Zlatníčková Aktualizováno 7. 1. 2026 – 9 min. čtení

Každý web, který pracuje s databází, dřív nebo později narazí na limity výkonu. Stránky se začnou načítat pomaleji, dotazy trvají déle a při špičce se server začne zadýchávat. A dost často to není tím, že „server je slabý“ nebo že MySQL je špatně nastavená –⁠⁠⁠⁠⁠⁠ ale tím, jak aplikace databázi používá.

V tomhle článku projdeme praktické kroky, jak databázi reálně zrychlit: od rychlé kontroly zdrojů (CPU, RAM, disk, síť) přes chytré indexování a optimalizaci dotazů až po nasazení cache (Redis) nebo vyhledávání (Elasticsearch). Bez nekonečného tunění konfigurace –⁠⁠⁠⁠⁠⁠ zato s měřitelným výsledkem.

Co pomůže:

  • Co databáze potřebuje (CPU, memory, disk(IO), network).
  • Nevytvářejte fronty na MySQL dotazy.
  • Nesoustřeďte se tolik na konfiguraci.
  • Pozor na pagination queries (dotazování na počet stránek).
  • Věnujte pozornost indexování.
  • Phpmyadmin … ten má fajn poradce pro začátečníky.
  • Slow query log.
  • Elasticsearch.
  • Redis.

Co databáze potřebuje

Pro rychlý chod databáze potřebujete mít v pořádku 4 hlavní zdroje:

  • CPU – pro výpočty a zpracování dotazů.
  • RAM – pro cache a in-memory operace.
  • Disk / IO – pro čtení a zápis dat.
  • Síťovou konektivitu – obzvlášť při oddělené DB.

Stačí, aby jeden z nich nestíhal – a výkonnostní problémy jsou na světě.

Než tedy začnete hledat složitější příčiny, prověřte nejdřív tyto čtyři oblasti – CPU, RAM, disk a síťovou konektivitu. Na výkon databáze mají zásadní vliv. V našem článku o zrychlení serveru doporučujeme i konkrétní nástroje, kterými je snadno otestujete.

Nedělejte z MySQL skladiště dat v čekárně

Častý problém: fronty čekajících MySQL dotazů.

Typický příklad: odesílání e-mailů, které se označí jako „čekající“, ale zpracovávají se postupně a zůstávají ve frontě. Výsledek? Zpomalený výkon, zahlcené tabulky databáze a nemožnost paralelního zpracování.

📌 Lepší přístup: použijte message queue nebo paralelní zpracování v dávkách.

Nesoustřeďte se tolik na konfiguraci

Mnoho lidí tráví hodiny laděním konfigurace, ale výsledkem často není zrychlení, nýbrž zpomalení.

Přílišné zásahy do my.cnf výkon spíš zhorší. Raději věnujte energii kvalitnímu indexování, dotazům a samotné aplikaci.

📌Chcete testovat? Zálohujte původní konfiguraci a experimentujte na stagingu, ne na ostrém webu.

Online nástroje, které se zrychlením databáze pomohou

Percona Configuration Wizard 🧙‍♂️

Prvním z nich je Percona Configuration Wizard for MySQL. V 7 krocích si v něm nastavíte parametry svého serveru a získáte návrh optimálního nastavení MySQL/MariaDB.

Percona Query Advisor

Percona Query Advisor for MySQL je jedoduchý nástroj, kam zadáte svůj SQL dotaz → získáte zpětnou vazbu a návrh, jak ho zrychlit.

PhpMyAdmin – Poradce

Ve Stav > Poradce najdete nejčastější problémy databáze spolu s návrhy na jejich řešení. Zobrazují se zde i serverové proměnné s odkazy do dokumentace.

Každý problém má vlastní chybovou hlášku a hned vedle doporučení, jak ho vyřešit. Po kliknutí se otevře okno s podrobnostmi.

Image

Pozor na pagination queries

Neboli na dotazování na počet stránek. Při zobrazování stránky s výsledky a s odkazem na další stránku se aplikace obvykle seskupují a třídí způsoby, které nemohou používat indexy, a používají LIMIT, aby kompenzovali škody, které serveru způsobují, protože provádí spousty práce.

Dotazy typu LIMIT 100000, 50 jsou extrémně náročné, protože se musí projít všechny předchozí řádky.

Místo toho:

  • Zobrazujte pouze odkaz na další stránku.
  • Omezte možnost listovat hluboko.
  • Uvažujte o cursor-based stránkování.

Věnujte pozornost indexování

Indexování je pravděpodobně nepochopené téma v databázích, protože existuje příliš mnoho způsobů, jak se nechat zmást. Proto se podíváme, jak vlastně fungují a jak je server používá.

Pokud jsou indexy správně navržené, slouží databázovému serveru k 3 hlavním účelům:

  1. Vyhledávání skupin řádků místo jednotlivých: Mnoho lidí si myslí, že index slouží jen k nalezení jednoho řádku. Jenže to vede k náhodným I/O operacím, které jsou velmi pomalé. Efektivnější je vyhledat rovnou skupinu sousedních řádků.
  2. Vyhnete se třídění: Indexy umožňují číst data v požadovaném pořadí, takže se obejdete bez nákladného třídění. Čtení rovnou správně seřazených řádků je mnohem rychlejší.
  3. Krycí indexy: Někdy dokáže index odpovědět na dotaz úplně sám, bez přístupu k tabulce. Této technice se říká krycí index (covering index). Když indexy a dotazy navrhnete chytře, můžete výkon dotazů posunout o několik levelů výš.

Příkaz EXPLAIN MySQL ukáže, jak bude jednotlivý dotaz zpracován databází. Můžete jej použít vždy na začátku dotazu. Vyzkoušejte jej v konzoli přímo v PhpMyAdmin nebo po připojení na SSH a k databázi.

EXPLAIN SELECT * FROM clanky WHERE skupina

Indexy nechte stranou, pokud se do hry dostane filesort a dočasné tabulky. V tu chvíli z nich žádný turbo-efekt nedostanete.

Skvělé příklady a ukázky právě okolo použití indexu najdete na webu php.vrána.cz

Další pomůcka, o které lidi moc neví, je takový menší “monitoring”, který hlídá serverové proměnné a jejich hodnoty a pokud překročí normu, zobrazí se červeně.

Výhoda je, že hned vedle proměnných máte odkaz na dokumentaci, kde se dozvíte, co znamenají a v popisu krátký vysvětlení problému.

Slow query log

Jak už název trochu napovídá, jedná se o speciální log, který v sobě uchovává informace o pomalých dotazech. Odkdy se mají pomalé dotazy logovat si můžete nastavit v konfiguračním souboru k MySQL/MariaDB.

Na našich serverech s VPS centrem najdete config na /etc/mysql/mariadb.conf.d/60-local.cnf , kde musíte odkomentovat tyto řádky a restartovat MySQL.

Druhou možností je spuštění pouze dočasně a to za pomocí SSH konzole. Takové spuštění se po restartu serveru vrátí do původního (vypnutého) stavu. Tuto možnost uvedeme do procesu následovně:

přihlásíme se k MySQL přes SSH

mysql -u root -p

# spustíme logování

SET GLOBAL slow_query_log = 'ON';

# nastavíme časový limit, kdy je dotaz považován za pomalý

SET GLOBAL long_query_time = 10;

Poté můžete na příkazové řádce spustit příkaz:

mysqldumpslow –⁠⁠⁠⁠⁠⁠ Případně můžete přidat [options] [log_file]

Po spuštění příkazu vám vyjedou veškeré dotazy, které přesahují limit, které jste v configu nastavili.

Freelo - Nástroj na řízení úkolů a projektů

Přidej se, pozvi svůj tým a klienty, rozděl práci a sleduj, jak se úkoly dají do pohybu.

Elasticsearch

Je fulltextový vyhledávač, který disponuje s RESTful rozhraním a nabízí vysokou dostupnost, rychlost a škálovatelnost.

Pokud se vám líbí stránky, kde při vybrání filtru okamžitě uvidíte výsledky, tak je to pravděpodobně díky Elasticsearch. Jedná se o bezschémovou databázi a není nutné definovat strukturu, protože se vytvoří sama na základě vložených dat.

Komunikace probíhá přes HTTP požadavky i odpovědí se posílají ve formátu JSON, takže můžete Elasticsearch využít v kombinaci s jakýmkoliv programovacím jazykem.

Pokud si chodíte do databáze často, určitě stojí za to vyzkoušet o kolik % se vaše stránky zrychlí. Určitě nezpomalí. 🙂

Mrkněte na oficiální návod: Jak začít s Elasticsearch.

VPS Centrum

Vyzkoušejte zdarma naši aplikaci pro správu serveru a domén. Budete si připadat jako zkušený administrátor.

Redis

Redis je extrémně rychlá in-memory databáze, která se často používá jako cache vrstva mezi aplikací a MySQL. Díky tomu dokáže výrazně zrychlit opakované dotazy a snížit zátěž hlavní databáze.

Typicky se v něm uchovávají často načítaná data – například seznamy produktů, nastavení, nebo výsledky složitějších SQL dotazů. Při každém požadavku se aplikace nejprve zeptá Redis, a pokud data existují, nemusí sahat do MySQL vůbec.

Redis dokáže fungovat i jako fronta, počítadlo nebo dočasné úložiště pro sessions a tokeny. Vše běží v paměti, takže reakce jsou téměř okamžité.

Mrkněte na oficiální dokumentaci: https://redis.io/docs

Na našich serverech s VPS Centrem je Redis v základu předinstalován

Pár slov závěrem

Zrychlení databáze nestojí na jednom parametru, ale na komplexní disciplíně: měřte → optimalizujte dotazy a indexy → teprve pak sahejte po nástrojích.

Pojďme si zrekapitulovat vše, co jsme se dnes dozvěděli, ať vám nic neuteče:

  1. Při potížích se nejprve zaměřte na 4 hlavní zdroje – CPU, RAM, IO a síť.
  2. Zastavte fronty dotazů na MySQL – dejte práci do queue/batchů.
  3. Netravte zbytečně moc času nad úpravami konfiguračního souboru, bez prvotního měření.
  4. Upravte pagination (keyset/cursor, neboli mělké listování).
  5. Dodejte indexy (a ověřte je EXPLAINem).
  6. Pusťte slow query log a opravte top „hříšníky“.
  7. Kde to dává smysl, zapojte Redis (cache) a Elasticsearch (fulltext/filtry).
    Takhle posunete odezvu o řád níž – a bez zbytečných kouzel v my.cnf.

Chcete to dotáhnout až do úplného konce? Mrkněte na naše další průvodce zrychlením serveru + analýza a monitoring serveru → a máte svižný web od infrastruktury až po UX.

Zůstaňte s námi v kontaktu

Jednou za měsíc posíláme souhrn novinek. Nemusíte se bát, spamovat vás nebudeme a odhlásit se můžete kdykoliv...

Karel Dytrych
Tým Váš Hosting
Vyzkoušejte náš trial na týden zdarma

Garance 14denní záruky vrácení peněz

Vyzkoušejte server na týden zdarma

Vyzkoušet server