Benchmarking ist das Mittel der Wahl zum Testen und Tunen der Leistungsfähigkeit eines relationalen Datenbankmanagementsystems (RDBMS). Das Open Source RDBMS PostgreSQL bietet bereits eine Reihe von Tools, um Datenbankadministratoren und Entwicklern das Leben zu erleichtern. pgbench ist das Benchmarking Tool, welches direkt mit der Installation von PostgreSQL verfügbar wird.

pgbench wiederholt beim Standardskript periodisch dieselbe Aufeinanderfolge von SQL Befehlen. Dieses setzt sich aus fünf SELECT, UPDATE und INSERT Operationen pro Transaktion zusammen. Darauf basierend wird die durchschnittliche Transaktionsrate pro Sekunde (tps = transactions per second) bestimmt. Neben den Standardskripten von pgbench können auch eigene, auf besondere Anforderungen ausgelegte Skripte verwendet werden. Einer dieser Performancetests ist ausschließlich mit SELECT Anweisungen vorbereitet, um lediglich das Lesen auf den Standby-Instanzen zu benchmarken.

pgbench einrichten

Bevor nun pgbench ausgeführt werden kann, wird eine separate Datenbank für den Test angelegt.

Copy to Clipboard

Danach folgt das Initialisieren von pgbench mit dem Parameter -i.

Copy to Clipboard

Dabei wird standardmäßig mit einem Skalierungsfaktor (-s) von Eins eine Menge von Zeilen in vier Tabellen erzeugt. Die vier Tabellen können einfach per psql CLI angezeigt werden.

Copy to Clipboard

Die Datenbank hat nach dem Initialisieren ohne weitere Parameter eine Größe von ca. 23 MB.

Copy to Clipboard

Die Anzahl der Zeilen pro Tabelle wird in diesem Beispiel mit dem Skalierungsfaktor 10 vergrößert. Nun hat die Testdatenbank eine Größe von ca. 160 MB.

Copy to Clipboard

Test durchführen

pgbench bietet eine ganze Reihe von Parametern um die Art und Weise der Ausführung anzupassen. Häufig verwendete Parameter sind:

Copy to Clipboard

Alle Parameter sind in der pgbench Dokumentation zu finden.

Jetzt kann der erste Test gestartet werden!

In diesem Szenario wird der Standardtest verwendet. Fünf Clients führen jeweils 10000 Transaktionen auf der Testdatenbank aus.

Copy to Clipboard

Die Ausgabe zeigt zuerst Informationen zum Test bezüglich der verwendeten Parameter an. Danach wird die ermittelte Transaktionsrate (tps) angezeigt. Je höher der Wert ist, umso besser das Ergebnis.

Der TPS Wert kann nun als Baseline für das Performance Tuning genutzt werden.

Performance Tuning

Die folgenden Schritte stellen für gewöhnlich den Ablauf beim Tuning per pgbench dar:

Konfigurationsdatei postgresql.conf oder per ALTER SYSTEM Befehl die Konfigurationsparameter nach Bedarf anpassen (je nach Parameter Instanz neustarten) Test wiederholen mit gleichen Parametern TPS Wert mit vorherigem Wert vergleichen und bei einem höheren Wert Konfigurationsparameter weiter anpassen, bei einem niedrigeren Wert geänderte Konfigurationsparameter zurücksetzen.

Als Beispiel wird der Konfigurationsparameter shared_buffers erhöht. Dies kann mit einem ALTER SYSTEM Befehl erfolgen.

Copy to Clipboard

Mit dem ALTER SYSTEM Befehl wird der neue Wert für die shared_buffers in der postgresql.auto.conf gespeichert.

Blog Yannic Nevado

Yannic Nevado

Yannic Nevado war Datenbank-Consultant bei der Proventa AG. Seine Schwerpunkte lagen beim Open Source und EDB Postgres. Er arbeitete mit Kunden daran neue Datenbanksysteme einzuführen. Des Weiteren unterstützte er Migrationen von Oracle und DB2 zu Postgres. DevOps mit Containern und Kubernetes gehörten außerdem zu seinem Alltag.