PostgreSQL und Leistung
Leistung ist eine der wichtigsten Anforderungen beim Design von Softwarearchitekturen und stand seit den Anfängen im Fokus der PostgreSQL-Entwickler, was auch im folgenden Commit der PostgreSQL-Git-Quellen gezeigt wird:
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 erzielt Leistung durch die Implementierung verschiedener Funktionen:
- Mehrere Indextypen
- Abfrageplaner und -optimierer, der Multiprozessorsysteme nutzen kann
- MVCC
- Tabellenpartitionierung
Umgebungsauswahl
Bei den vielen heute verfügbaren Optionen kommen ebenso viele Fragen auf:
- Vor Ort oder in der Cloud?
- Bare Metal oder virtualisiert?
- Markenhardware oder eigene bauen?
- Wie wirken sich die Low-Level-Funktionen von PostgreSQL oder fsync auf die Hardwareleistung aus?
- Lokaler Datenträger oder gemeinsam genutzter Speicher?
- Welche einstellbaren Parameter des Betriebssystems müssen eingestellt werden?
Auch hier ist das PostgreSQL-Wiki ein sehr guter Ausgangspunkt für alle Dinge rund um die Leistung.
Worauf sollten Sie achten?
Da es viel Literatur gibt, die verschiedene Aspekte der PostgreSQL-Leistungsoptimierung und des Systemdesigns berührt (Tipp:Suchen Sie auf der Seite nach xfs), soll dieser Blog kein tiefes Eintauchen in eines der bereits besprochenen Themen sein, sondern eher ein die Perspektive des Systemadministrators, wo man anfangen soll, wenn der Hauptfokus auf der Vermeidung von Ressourcenkonflikten liegt. Ich werde auch auf viele Referenzen hinweisen, die spezifische Probleme detaillierter ansprechen. Expertenrat in allen Bereichen, die für die Leistung von PostgreSQL entscheidend sind, erhalten Sie von den vielen Unternehmen, die Professional Services anbieten.
Fangen wir an!
Informationssammlung
Unter der Annahme einer Standardinstallation und dem Wissen, dass PostgreSQL nicht versucht, von Haus aus gut eingestellt zu sein, und es sogar einige Macken geben kann, umfasst dieser Schritt die Einrichtung der erforderlichen Überwachungstools.
Eine gute Überwachung ist entscheidend, um die Anwendung zu verstehen und die betroffenen Ressourcen schnell aufzuspüren, und dies gilt insbesondere für Cloud-Anbieter, bei denen der Zugriff auf den Datenbankhost möglicherweise nicht verfügbar ist, um Benchmarks für CPU oder E/A auszuführen:
Abb.1 – SlideShare, Jignesh Shah, Best Practices mit verwaltetem PostgreSQL in der CloudAuf Systemleistungswarnungen reagieren
Überwachungstools stellen Systemleistungsindikatoren grafisch dar und warnen:
Prozessor:
- Warnung – Eine hohe Nutzung weist auf eine lange laufende Abfrage hin.
- Auswirkung – Antwortzeit der Anwendung.
- Aktion – Überprüfen Sie die Metriken der Datenbankstatistiken, um Abfragen zu identifizieren, die optimiert werden müssen.
E/A:
- Warnung – Hohe Anzahl an Lesevorgängen.
- Auswirkung – Antwortzeit der Anwendung.
- Aktion – Fügen Sie eine weitere Read Replica hinzu. Überprüfen Sie die Metriken der Datenbankstatistiken, um lang andauernde Abfragen zu identifizieren.
- Warnung – Hohe Anzahl an Schreibvorgängen.
- Auswirkung – Antwortzeit der Anwendung.
- Aktion – Optimieren Sie die GUC-Parameter shared_buffers, work_mem und maintenance_work_mem. Stellen Sie den Checkpointer ein und vergewissern Sie sich, dass das Autovakuum richtig eingestellt ist. Wenn PostgreSQL auf eigener Hardware installiert ist, konfigurieren Sie Tablespaces und/oder erwägen Sie Sharding, aber verstehen Sie die Sharding-Einschränkungen.
Speicher:
- Warnung – Hohe Speicherauslastung.
- Auswirkung – E/A-Leistung.
- Aktion – Überprüfen Sie die Metriken der Datenbankstatistiken, um Abfragen zu identifizieren, die optimiert werden müssen.
Netzwerk:
- Warnung – Hohe Latenz. Normalerweise ist dies ein DBaaS-Problem.
- Auswirkung – Clients, Replikation.
- Aktion – Datenbankhosts näher an Frontend-Server verlagern.
- Warnung – Hohe Anzahl von Verbindungen.
- Auswirkung – Kunden.
- Maßnahme – Erwägen Sie die Verwendung von Verbindungsabfragen.
Datenbankinterne Leistungsindikatoren
Die pg_*-Ansichten sind das Fenster zur Leistung der Datenbank-Engine, und PostgreSQL-Verwaltungsanwendungen wurden geschrieben, um bei der Korrelation der Fülle von Informationen zu helfen, die ansonsten durch verschiedene SQL-Abfragen verfügbar sind. Zusätzliche Erweiterungen existieren und sind oft integriert oder als Plugins verfügbar.
Die Verwendung solcher Tools vereinfacht die DBA-Aufgabe und stellt sicher, dass Best Practices beim Einrichten und Konfigurieren des Datenbank-Clusters befolgt werden.
Datenbankstatistiken
Überwachungstools wie ClusterControl verwenden Datenbankaktivitätsstatistiken, um den DBA bei der Leistungsoptimierung zu unterstützen:
Abb.2 – Mehrere Neunen, wichtige Dinge, die in PostgreSQL überwacht werden müssen – Analysieren Ihrer ArbeitslastLaden Sie noch heute das Whitepaper PostgreSQL Management &Automation herunter mit ClusterControlErfahren Sie, was Sie wissen müssen, um PostgreSQL bereitzustellen, zu überwachen, zu verwalten und zu skalieren. Laden Sie das Whitepaper herunterAnfrageoptimierung
Beginnend mit Version 9.5 enthält PostgreSQL erhebliche Verbesserungen der Abfrageleistung wie BRIN-Indizes und parallele Abfragen:
Abb.3 – 2.Quadrant, Thomas Vondra, Leistungsverbesserungen in PostgreSQL 9.5 (und höher)Sperren
Concurrency Control ist ein ganzes Kapitel in der PostgreSQL-Dokumentation gewidmet. Verwenden Sie Überwachungstools, um benachrichtigt zu werden, wenn die Anzahl der Sperren oder die Sperrdauer den Schwellenwert überschreiten, und beheben Sie das Problem, indem Sie nach fehlenden Indizes suchen, den Anwendungscode überprüfen oder zur Verbindungsabfrage wechseln.
Massenladung
Synchronous_commit kann während großer Datenimporte deaktiviert werden. Weitere Optionen werden im PostgreSQL-Dokumentationsabschnitt Befüllen einer Datenbank diskutiert.
Schlussfolgerung
Die Leistungsoptimierung von PostgreSQL ist eine komplexe Aufgabe. Die Komplexität ergibt sich aus den vielen zur Verfügung gestellten Tunables, was ein starkes Argument für PostgreSQL ist. Es gibt keine Wunderwaffe zur Lösung von Leistungsproblemen, sondern es sind die Anwendungsspezifika, die letztendlich die Tuning-Anforderungen diktieren. Daher können Überwachungstools dazu beitragen, Einblicke in die Leistung in Bezug auf die Systemleistung zu gewinnen, und es ermöglichen, die PostgreSQL-spezifischen Bereiche zu identifizieren, die optimiert werden müssen, sowie die SQL-Abfragen, die optimiert werden müssen. Zusätzlich können Datenbankverwaltungssysteme bei der Einrichtung und Verwaltung von PostgreSQL helfen, um sicherzustellen, dass Best Practices befolgt werden.