PostgreSQL en prestaties
Prestaties zijn een van de belangrijkste vereisten bij het ontwerpen van software-architectuur en zijn sinds het begin de focus van PostgreSQL-ontwikkelaars, ook weergegeven in de volgende toezegging van PostgreSQL Git-bronnen:
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 bereikt prestaties door verschillende functies te implementeren:
- Verschillende indextypen
- Queryplanner en -optimalisatie die kan profiteren van multiprocessorsystemen
- MVCC
- Tafelpartitionering
Omgevingsselectie
Met de vele opties die vandaag beschikbaar zijn, komen evenveel vragen:
- Op locatie of in de cloud?
- Bare metal of gevirtualiseerd?
- Hardware gebrandmerkt of zelf gebouwd?
- Hoe beïnvloeden de PostgreSQL-functies op laag niveau of fsync de hardwareprestaties?
- Lokale schijf of gedeelde opslag?
- Welke instellingen voor het besturingssysteem moeten worden ingesteld?
Nogmaals, de PostgreSQL-wiki is een zeer goed startpunt voor alles wat met prestaties te maken heeft.
Waar moet u op letten?
Aangezien er veel literatuur beschikbaar is over verschillende aspecten van het afstemmen van PostgreSQL-prestaties en systeemontwerp (hint:zoek op de pagina naar xfs), is deze blog niet bedoeld als een diepe duik in een van de reeds besproken onderwerpen, maar eerder een sysadmin's perspectief op waar te beginnen wanneer de belangrijkste focus het vermijden van resourceconflicten is. Ik zal ook wijzen op veel referenties die specifieke problemen in meer detail behandelen. Deskundig advies op alle gebieden die essentieel zijn voor de prestaties van PostgreSQL is beschikbaar via de vele bedrijven die professionele services aanbieden.
Laten we beginnen!
Informatie verzamelen
Uitgaande van een standaardinstallatie en wetende dat PostgreSQL niet standaard probeert te worden afgestemd en dat er misschien zelfs wat eigenaardigheden zijn, omvat deze stap het instellen van de nodige monitoringtools.
Goede monitoring is van cruciaal belang om de toepassing te begrijpen en om de getroffen bronnen snel op te sporen, en dit geldt met name voor cloudproviders waar toegang tot de databasehost mogelijk niet beschikbaar is om benchmarks voor CPU of I/O uit te voeren:
Fig.1 — SlideShare, Jignesh Shah, best practices met beheerde PostgreSQL in de cloudReageren op systeemprestatiewaarschuwingen
Monitoringtools geven grafieken en waarschuwingen over systeemprestatie-indicatoren:
CPU:
- Waarschuwing — Hoog gebruik duidt op een langlopende zoekopdracht.
- Impact — Reactietijd van toepassing.
- Actie — Bekijk de statistieken van databasestatistieken om zoekopdrachten te identificeren die moeten worden aangepast.
I/O:
- Waarschuwing — Hoog aantal of gelezen.
- Impact — Reactietijd van toepassing.
- Actie — Voeg nog een leesreplica toe. Bekijk de statistieken van de database om langlopende zoekopdrachten te identificeren.
- Waarschuwing — Hoog aantal schrijfbewerkingen.
- Impact — Reactietijd van toepassing.
- Actie — Stem de GUC-parameters shared_buffers, work_mem en maintenance_work_mem af. Stem de checkpointer af en zorg ervoor dat het autovacuüm correct is afgesteld. Als PostgreSQL is geïnstalleerd op eigen hardware, configureer dan tabelruimten en/of overweeg sharding, maar begrijp de sharding-voorbehouden.
Geheugen:
- Waarschuwing — Hoog geheugengebruik.
- Impact — I/O-prestaties.
- Actie — Bekijk de statistieken van databasestatistieken om zoekopdrachten te identificeren die moeten worden aangepast.
Netwerk:
- Waarschuwing — Hoge latentie. Meestal is dit een DBaaS-probleem.
- Impact — Klanten, replicatie.
- Actie — Verplaats databasehosts dichter bij frontend-servers.
- Waarschuwing — Hoog aantal verbindingen.
- Impact — Klanten.
- Actie — Overweeg om verbindingspolling te gebruiken.
Database interne prestatie-indicatoren
De pg_*-weergaven zijn het venster naar de prestaties van de database-engine, en PostgreSQL-beheertoepassingen zijn geschreven om te helpen bij het correleren van de rijkdom aan informatie die anders beschikbaar is via verschillende SQL-query's. Er zijn aanvullende extensies en deze zijn vaak geïntegreerd of beschikbaar als plug-ins.
Het gebruik van dergelijke tools vereenvoudigt de DBA-taak en zorgt ervoor dat de best practices worden gevolgd bij het opzetten en configureren van het databasecluster.
Databasestatistieken
Monitoringtools zoals ClusterControl gebruiken statistieken over databaseactiviteit om de DBA te helpen bij het afstemmen van de prestaties:
Fig.2 — Meerdere punten, belangrijke dingen om te controleren in PostgreSQL — Analyse van uw werklastDownload de whitepaper vandaag PostgreSQL Management &Automation met ClusterControlLeer wat u moet weten om PostgreSQL te implementeren, bewaken, beheren en schalenDownload de whitepaperQuery afstemmen
Vanaf versie 9.5 bevat PostgreSQL aanzienlijke prestatieverbeteringen voor query's, zoals BRIN-indexen en parallelle query's:
Fig.3 — 2ndQuadrant, Thomas Vondra, prestatieverbeteringen in PostgreSQL 9.5 (en hoger)Vergrendelen
Concurrency Control is een heel hoofdstuk gewijd aan PostgreSQL-documentatie. Gebruik monitoringtools om gewaarschuwd te worden wanneer het aantal vergrendelingen of de duur van de vergrendeling de drempel overschrijdt en los het probleem op door te zoeken naar ontbrekende indexen, de applicatiecode te bekijken of door over te schakelen naar polling van verbindingen.
Bulklading
synchronous_commit kan worden uitgeschakeld tijdens het importeren van grote gegevens. Meer opties worden besproken in de PostgreSQL-documentatiesectie Een database vullen.
Conclusie
Het afstemmen van prestaties op PostgreSQL is een complexe taak. De complexiteit komt van de vele beschikbare tunables, wat een sterk argument is voor PostgreSQL. Er is geen wondermiddel voor het oplossen van prestatieproblemen, het zijn eerder de toepassingsspecificaties die uiteindelijk de afstemmingsvereisten dicteren. Daarom kunnen monitoringtools helpen bij het verkrijgen van prestatie-inzichten met betrekking tot de systeemprestaties en verder om de PostgreSQL-specifieke gebieden te identificeren die moeten worden aangepast, evenals de SQL-query's die moeten worden geoptimaliseerd. Bovendien kunnen databasebeheersystemen helpen bij het opzetten en beheren van PostgreSQL om ervoor te zorgen dat de beste werkwijzen worden gevolgd.