Správa výkonu databáze je oblast, do které podniky, když správci často věnují více času, než očekávali.
Monitorování a reakce na problémy s výkonem produkční databáze je jednou z nejdůležitějších úloh v rámci práce správce databáze. Je to neustálý proces, který vyžaduje neustálou péči. Aplikační a podkladové databáze se obvykle vyvíjejí s časem; růst ve velikosti, počtu uživatelů, pracovní zátěži, změnách schématu, které přicházejí se změnami kódu.
Dlouhotrvající dotazy jsou v databázi MySQL zřídkakdy nevyhnutelné. Za určitých okolností může být dlouhotrvající dotaz škodlivou událostí. Pokud vám na databázi záleží, optimalizace výkonu dotazů a zjišťování dlouhotrvajících dotazů musí být prováděny pravidelně.
V tomto blogu se podrobněji podíváme na skutečné zatížení databáze, zejména na straně běžících dotazů. Prověříme, jak sledovat dotazy, jaké informace můžeme najít v metadatech MySQL, jaké nástroje použít k analýze takových dotazů.
Zpracování dlouhotrvajících dotazů
Začněme kontrolou dlouhotrvajících dotazů. Nejprve musíme znát povahu dotazu, zda se očekává, že se bude jednat o dlouhotrvající nebo krátkodobý dotaz. Některé analytické a dávkové operace mají být dlouhodobými dotazy, takže je nyní můžeme přeskočit. V závislosti na velikosti tabulky může být úprava struktury tabulky pomocí příkazu ALTER také dlouhodobou operací (zejména v MySQL Galera Clusters).
- Zámek tabulky – Tabulka je uzamčena globálním zámkem nebo explicitním zámkem tabulky, když se k ní dotaz pokouší získat přístup.
- Neefektivní dotaz – Při vyhledávání nebo připojování používejte neindexované sloupce, takže MySQL trvá déle, než se podmínce přizpůsobí.
- Zablokování – Dotaz čeká na přístup ke stejným řádkům, které jsou uzamčeny jiným požadavkem.
- Datová sada se nevejde do paměti RAM – Pokud se data vaší pracovní sady vejdou do mezipaměti, budou SELECT dotazy obvykle relativně rychlé.
- Neoptimální hardwarové zdroje – Mohou to být pomalé disky, přestavba RAID, přesycená síť atd.
Pokud uvidíte, že provedení dotazu trvá déle než obvykle, prozkoumejte jej.
Použití MySQL Zobrazit seznam procesů
MYSQL> SHOW PROCESSLIST;
Toto je obvykle první věc, kterou spustíte v případě problémů s výkonem. SHOW PROCESSLIST je interní příkaz mysql, který ukazuje, která vlákna jsou spuštěna. Tyto informace můžete také vidět z tabulky information_schema.PROCESSLIST nebo příkazu mysqladmin process list. Pokud máte oprávnění ZPRACOVAT, můžete vidět všechna vlákna. Můžete vidět informace, jako je ID dotazu, doba provádění, kdo to spouští, klientský hostitel atd. Informace jsou mírně opatrné v závislosti na verzi a distribuci MySQL (Oracle, MariaDB, Percona)
SHOW PROCESSLIST;
+----+-----------------+-----------+------+---------+------+------------------------+------------------+----------+
| Id | User | Host | db | Command | Time | State | Info | Progress |
+----+-----------------+-----------+------+---------+------+------------------------+------------------+----------+
| 2 | event_scheduler | localhost | NULL | Daemon | 2693 | Waiting on empty queue | NULL | 0.000 |
| 4 | root | localhost | NULL | Query | 0 | Table lock | SHOW PROCESSLIST | 0.000 |
+----+-----------------+-----------+------+---------+------+------------------------+------------------+----------+
urážlivý dotaz můžeme okamžitě vidět hned z výstupu. Ve výše uvedeném příkladu by to mohl být zámek tabulky. Ale jak často se na ty procesy díváme? To je užitečné pouze v případě, že jste si vědomi dlouhotrvající transakce. Jinak byste to nevěděli, dokud se něco nestane – například se hromadí připojení nebo se server zpomaluje než obvykle.
Použití MySQL Pt-query-digest
Pokud byste chtěli vidět více informací o konkrétní zátěži, použijte pt-query-digest. pt-query-digest je linuxový nástroj od Percona pro analýzu dotazů MySQL. Je součástí Percona Toolkit, který najdete zde. Podporuje nejoblíbenější 64bitové distribuce Linuxu, jako je Debian, Ubuntu a Redhat.
Abyste jej mohli nainstalovat, musíte nakonfigurovat úložiště Percona a poté nainstalovat balíček perona-toolkit.
Nainstalujte Percona Toolkit pomocí správce balíčků:
Debian nebo Ubuntu:
sudo apt-get install percona-toolkit
RHEL nebo CentOS:
sudo yum install percona-toolkit
Pt-query-digest přijímá data ze seznamu procesů, obecného protokolu, binárního protokolu, pomalého protokolu nebo tcpdump Kromě toho je možné v definovaném intervalu dotazovat seznam procesů MySQL – proces který může být náročný na zdroje a zdaleka není ideální, ale stále může být použit jako alternativa.
Nejběžnějším zdrojem pro pt-query-digest je pomalý protokol dotazů. Pomocí parametru log_slow_verbosity můžete ovládat, kolik dat tam půjde.
Existuje řada věcí, které mohou způsobit, že provedení dotazu bude trvat déle:
- mikročas – dotazy s mikrosekundovou přesností.
- plán_dotazů – informace o plánu provádění dotazu.
- innodb – statistiky InnoDB.
- minimální – Ekvivalent povolení pouze mikročasu.
- standardní – ekvivalentní povolení mikročasu, innodb.
- plná – Ekvivalentní všem ostatním hodnotám NEBO společně bez možností profilování a profiling_use_getrusage.
- profilování – Umožňuje profilování všech dotazů ve všech spojeních.
- profiling_use_getrusage – Umožňuje použití funkce getrusage.
zdroj:dokumentace Percona
Pro úplnost použijte log_slow_verbosity=full, což je běžný případ.
Protokol pomalého dotazu
Protokol pomalých dotazů lze použít k vyhledání dotazů, jejichž provedení trvá dlouho, a jsou proto kandidáty na optimalizaci. Protokol pomalého dotazu zachycuje pomalé dotazy (příkazy SQL, jejichž provedení trvá déle než long_query_time sekund) nebo dotazy, které nepoužívají indexy pro vyhledávání (log_queries_not_using_indexes). Tato funkce není ve výchozím nastavení povolena a pro její aktivaci stačí nastavit následující řádky a restartovat MySQL server:
[mysqld]
slow_query_log=1
log_queries_not_using_indexes=1
long_query_time=0.1
Protokol pomalých dotazů lze použít k vyhledání dotazů, jejichž provedení trvá dlouho, a jsou proto kandidáty na optimalizaci. Zkoumání dlouhého pomalého protokolu dotazů však může být časově náročný úkol. Existují nástroje pro analýzu souborů protokolu pomalých dotazů MySQL a shrnutí jejich obsahu, jako je mysqldumpslow, pt-query-digest.
Schéma výkonu
Performance Schema je skvělý nástroj dostupný pro monitorování vnitřních částí serveru MySQL a podrobností o provádění na nižší úrovni. V dřívější verzi (5.6) měl špatnou pověst, protože jeho aktivace často způsobovala problémy s výkonem, avšak nejnovější verze výkon nepoškozují. Následující tabulky ve schématu výkonu lze použít k nalezení pomalých dotazů:
- events_statements_current
- events_statements_history
- events_statements_history_long
- events_statements_summary_by_digest
- events_statements_summary_by_user_by_event_name
- events_statements_summary_by_host_by_event_name
MySQL 5.7.7 a vyšší obsahuje schéma sys, sadu objektů, která pomáhá správcům databází a vývojářům interpretovat data shromážděná pomocí schématu výkonu do snáze srozumitelné podoby. Objekty sys schématu lze použít pro typické případy použití ladění a diagnostiky.
Sledování sítě
Co když nemáme přístup k protokolu dotazů nebo přímým protokolům aplikace. V takovém případě bychom mohli použít kombinaci tcpdump a pt-query digest, která by mohla pomoci zachytit dotazy.
$ tcpdump -s 65535 -x -nn -q -tttt -i any port 3306 > mysql.tcp.txt
Jakmile proces zachycení skončí, můžeme pokračovat ve zpracování dat:
$ pt-query-digest --limit=100% --type tcpdump mysql.tcp.txt > ptqd_tcp.out
Monitor dotazů ClusterControl
ClusterControl Query Monitor je modul v ovládání clusteru, který poskytuje kombinované informace o aktivitě databáze. Může shromažďovat informace z více zdrojů, jako je zobrazení seznamu procesů nebo protokol pomalých dotazů, a prezentovat je předem agregovaným způsobem.
Sledování SQL je rozděleno do tří sekcí.
Nejčastější dotazy
představuje informace o dotazech, které zabírají značnou část zdrojů.
Spouštění dotazů
je to procesní seznam informací kombinovaných ze všech uzlů databázového clusteru do jednoho pohledu. Můžete to použít k ukončení dotazů, které ovlivňují vaše databázové operace.
Odlehlé hodnoty dotazu
zobrazit seznam dotazů s dobou provádění delší než je průměr.
Závěr
To je vše pro druhou část. Tento blog nemá být vyčerpávajícím průvodcem, jak zvýšit výkon databáze, ale doufejme, že poskytuje jasnější obrázek o tom, jaké věci se mohou stát zásadními a některé základní parametry, které lze konfigurovat. Neváhejte a dejte nám vědět, pokud jsme nějaké důležité vynechali v komentářích níže.