PostgreSQL a výkon
Výkon je jedním z klíčových požadavků při návrhu softwarové architektury a vývojáři PostgreSQL se na něj soustředili od jeho počátků, což je také ukázáno v následujícím prohlášení zdrojů PostgreSQL Git:
commit d31084e9d1118b25fd16580d9d8c2924b5740dff
Author: Marc G. Fournier <[email protected]>
Date: Tue Jul 9 06:22:35 1996 +0000
Postgres95 1.01 Distribution - Virgin Sources
[...]
diff --git a/src/backend/access/heap/stats.c b/src/backend/access/heap/stats.c
new file mode 100644
index 0000000000..d41d01ac1b
--- /dev/null
+++ b/src/backend/access/heap/stats.c
@@ -0,0 +1,329 @@
+/*-------------------------------------------------------------------------
+ *
+ * stats.c--
+ * heap access method debugging statistic collection routines
+ *
+ * Copyright (c) 1994, Regents of the University of California
[...]
+ * Also note that this routine probably shouldn't have to exist, and does
+ * screw up the call graph rather badly, but we are wasting so much time and
+ * system resources being massively general that we are losing badly in our
+ * performance benchmarks.
+ */
PostgreSQL dosahuje výkonu implementací různých funkcí:
- Několik typů indexů
- Plánovač a optimalizátor dotazů, které mohou využívat víceprocesorové systémy
- MVCC
- Rozdělení tabulky na oddíly
Výběr prostředí
S mnoha dnes dostupnými možnostmi přichází mnoho otázek:
- Na místě nebo v cloudu?
- Bez kovu nebo virtualizované?
- Značkový hardware nebo si vytvořit svůj vlastní?
- Jak nízkoúrovňové funkce PostgreSQL nebo fsync ovlivňují výkon hardwaru?
- Místní disk nebo sdílené úložiště?
- Jaké laditelné možnosti operačního systému je třeba nastavit?
Opět platí, že PostgreSQL wiki je velmi dobrým výchozím bodem pro výkon všeho.
Jaké jsou hlavní věci, na které se zaměřit?
Vzhledem k tomu, že existuje spousta literatury, která se týká různých aspektů ladění výkonu PostgreSQL a návrhu systému (nápověda:vyhledejte na stránce xfs), tento blog není zamýšlen jako hluboký ponor do žádného z již diskutovaných témat, ale spíše jako pohled systémového správce na to, kde začít, když je hlavním cílem vyhnout se sporům o zdroje. Upozorním také na mnoho referencí, které se konkrétním problémům věnují podrobněji. Odborné poradenství ve všech oblastech kritických pro výkon PostgreSQL je k dispozici prostřednictvím mnoha společností nabízejících profesionální služby.
Začínáme!
Shromažďování informací
Za předpokladu výchozí instalace a s vědomím, že PostgreSQL se nesnaží být dobře vyladěné hned po vybalení a mohou se vyskytnout i určité zvláštnosti, tento krok zahrnuje nastavení nezbytných monitorovacích nástrojů.
Dobré monitorování je kritické pro pochopení aplikace a schopnost rychle vysledovat postižené zdroje, a to platí zejména pro poskytovatele cloudu, kde nemusí být dostupný přístup k hostiteli databáze za účelem spouštění benchmarků pro CPU nebo I/O:
Obr. 1 – SlideShare, Jignesh Shah, Best Practices with Managed PostgreSQL in the CloudReakce na výstrahy výkonu systému
Monitorovací nástroje vytvoří graf a upozorní na ukazatele výkonu systému:
CPU:
- Výstraha – Vysoké využití znamená dlouhotrvající dotaz.
- Dopad – doba odezvy aplikace.
- Akce – Zkontrolujte metriky databázových statistik a identifikujte dotazy, které je třeba vyladit.
I/O:
- Upozornění – Vysoký počet nebo přečtení.
- Dopad – doba odezvy aplikace.
- Akce – Přidejte další repliku pro čtení. Zkontrolujte metriky statistiky databáze a identifikujte dlouhotrvající dotazy.
- Výstraha — Vysoký počet zápisů.
- Dopad – doba odezvy aplikace.
- Akce — Vylaďte parametry GUC shared_buffers, work_mem a maintenance_work_mem. Vylaďte kontrolní ukazatel a ujistěte se, že je autovakuum správně naladěno. Pokud je PostgreSQL nainstalován na vlastním hardwaru, nakonfigurujte tabulkové prostory a/nebo zvažte sdílení, ale pochopte varování týkající se shardování.
Paměť:
- Výstraha – Vysoké využití paměti.
- Dopad – výkon I/O.
- Akce – Zkontrolujte metriky databázových statistik a identifikujte dotazy, které je třeba vyladit.
Síť:
- Výstraha – vysoká latence. Obvykle se jedná o problém DBaaS.
- Dopad – klienti, replikace.
- Akce – Přemístěte hostitele databáze blíže k frontendovým serverům.
- Výstraha – Vysoký počet připojení.
- Dopad – klienti.
- Akce – Zvažte použití dotazování na připojení.
Interní ukazatele výkonu databáze
Pohledy pg_* jsou oknem k výkonu databázového stroje a aplikace pro správu PostgreSQL byly napsány tak, aby pomáhaly při korelaci množství informací, které jsou jinak dostupné prostřednictvím různých SQL dotazů. Existují další rozšíření, která jsou často integrována nebo dostupná jako pluginy.
Použití takových nástrojů zjednodušuje úlohu DBA a zajišťuje dodržování osvědčených postupů při nastavování a konfiguraci databázového clusteru.
Statistiky databáze
Monitorovací nástroje, jako je ClusterControl, používají statistiky aktivity databáze, aby pomohly DBA s laděním výkonu:
Obr. 2 – Několik devíti klíčových věcí k monitorování v PostgreSQL – Analýza vaší pracovní zátěžeStáhněte si dokument ještě dnes Správa a automatizace PostgreSQL s ClusterControlZjistěte, co potřebujete vědět k nasazení, monitorování, správě a škálování PostgreSQLStáhněte si dokument WhitepaperLadění dotazů
Počínaje verzí 9.5 PostgreSQL zahrnuje značná vylepšení výkonu dotazů, jako jsou indexy BRIN a paralelní dotazy:
Obr. 3 — 2ndQuadrant, Thomas Vondra, Zlepšení výkonu v PostgreSQL 9.5 (a novějších)Zamykání
Concurrency Control je věnována celá kapitola v dokumentaci PostgreSQL. Použijte monitorovací nástroje, abyste byli upozorněni, když počet zámků nebo trvání zámku překročí prahovou hodnotu, a vyřešte problém hledáním chybějících indexů, kontrolou kódu aplikace nebo přepnutím na dotazování připojení.
Hromadné zatížení
synchronous_commit lze během importu velkých dat vypnout. Další možnosti jsou popsány v sekci dokumentace PostgreSQL Naplnění databáze.
Závěr
Ladění výkonu PostgreSQL je komplexní úkol. Složitost pochází z mnoha dostupných laditelných možností, což je silný argument ve prospěch PostgreSQL. Řešení problémů s výkonem nemá žádnou tečku, ale požadavky na ladění nakonec diktují specifika aplikace. Monitorovací nástroje proto mohou pomoci při získávání přehledů o výkonu ve vztahu k výkonu systému a dále umožňují identifikovat specifické oblasti PostgreSQL, které potřebují vyladění, a také SQL dotazy, které vyžadují optimalizaci. Kromě toho mohou systémy správy databází pomoci s nastavením a správou PostgreSQL, aby bylo zajištěno, že budou dodržovány osvědčené postupy.