Wie man PostgreSQL für optimale Leistung benchmarkt

Mit dem wachsenden Einsatz von PostgreSQL müssen Datenbankadministratoren (DBAs) und Entwickler häufig die Leistungsfähigkeit bewerten, um sicherzustellen, dass ihre Anwendungen unter verschiedenen Workloads effizient laufen. Die Leistungsüberprüfung ist ein kritischer Prozess, der misst, wie gut PostgreSQL mit unterschiedlichen Lasten umgeht und hilft, Engpässe und Optimierungsbereiche zu identifizieren. Dieser Artikel erkundet Tools, Metriken und Test-Szenarien, um Ihnen zu helfen, PostgreSQL wie ein Profi zu benchmarken.

Warum PostgreSQL benchmarken?

Das Benchmarking ermöglicht es Ihnen:

  1. Die Durchsatzrate und Latenz Ihrer Datenbank unter spezifischen Workloads zu messen.
  2. Hardware- oder Konfigurationsengpässe zu identifizieren.
  3. Den Einfluss von Optimierungen wie Indexänderungen oder Abfrageumformulierungen zu vergleichen.
  4. Reale Szenarien wie hohe gleichzeitige Benutzeraktivität oder Massendatenschreibvorgänge zu simulieren.

Wichtige Metriken zum Verfolgen

Beim Benchmarking von PostgreSQL konzentrieren Sie sich auf diese Metriken:

  • TPS (Transaktionen pro Sekunde): Misst, wie viele Transaktionen die Datenbank in einer Sekunde abschließt.
  • IOPS (Ein-/Ausgabeoperationen pro Sekunde): Verfolgt die Festplattenaktivität.
  • Latenz: Misst die Zeit, die für die Ausführung von Abfragen benötigt wird, was sich auf die Benutzererfahrung auswirkt.
  • Ressourcennutzung: Verfolgt CPU-, Speicher- und Festplattennutzung während des Benchmarks.

Tools für PostgreSQL-Benchmarking

1. pgbench

Was ist pgbench?

pgbench ist ein Benchmarking-Tool, das in PostgreSQL integriert ist. Es simuliert gleichzeitige Clients, die Transaktionen ausführen, und misst die Leistung der Datenbank.

Installation

Es ist in PostgreSQL-Installationen enthalten. Zur Überprüfung führen Sie aus:

Shell

 

bash
pgbench --version

Erste Schritte

1. Initialisieren einer Benchmark-Datenbank:

Shell

 

bash
pgbench -i -s 50 mydb

Hier legt -s den Skalierungsfaktor fest, der die Größe des Datensatzes bestimmt.

2. Führen Sie einen einfachen Benchmark aus:

Shell

 

bash
pgbench -c 10 -j 2 -T 60 mydb

  • -c 10: Anzahl der Clientverbindungen.
  • -j 2: Anzahl der Threads.
  • -T 60: Benchmark-Dauer in Sekunden.

Beispiel-Ausgabe:

YAML

 

transaction type: TPC-B (sort of)
scaling factor: 50
number of clients: 10
number of threads: 2
duration: 60 s
tps = 1420.123 (excluding connections establishing)

2. Sysbench

Warum Sysbench verwenden?

Sysbench ist ein vielseitiges Benchmarking-Tool für Datenbanken und Systeme. Es bietet mehr Flexibilität als pgbench für benutzerdefinierte Workloads.

Installation

Installieren Sie Sysbench mit dem folgenden Befehl:

Shell

 

bash
sudo apt-get install sysbench

Erste Schritte

1. Bereiten Sie den Benchmark vor:

Shell

 

bash
sysbench --db-driver=pgsql --pgsql-db=mydb \
  --pgsql-user=postgres --tables=10 --table-size=1000000 \
  oltp_read_write prepare

2. Führen Sie den Benchmark aus:

Shell

 

bash
sysbench --db-driver=pgsql --pgsql-db=mydb \
  --pgsql-user=postgres --threads=4 \
  --time=60 oltp_read_write run

3. pg_stat_statements

Was ist pg_stat_statements?

Eine PostgreSQL-Erweiterung, die die Abfrageleistung und Ausführungsstatistiken verfolgt. Obwohl sie keine Arbeitslasten simuliert, hilft sie dabei, langsame Abfragen während Benchmarks zu analysieren.

Einrichtung

1. Aktivieren Sie die Erweiterung in der Datei postgresql.conf:

Plain Text

 

shared_preload_libraries = 'pg_stat_statements'

2. Laden Sie die Konfiguration neu und erstellen Sie die Erweiterung:

SQL

 

CREATE EXTENSION pg_stat_statements;

Verwendung

Führen Sie die folgende Abfrage aus, um lang laufende Anweisungen zu identifizieren:

SQL

 

SELECT query, total_exec_time, calls
FROM pg_stat_statements
ORDER BY total_exec_time DESC;

Benchmark-Szenarien

Nachfolgend finden Sie eine visuelle Darstellung der Benchmark-Ergebnisse für drei Szenarien: Leseintensiv, Schreibintensiv und gemischte Arbeitslasten. Das Transaktionen pro Sekunde (TPS) Diagramm zeigt die Fähigkeit von PostgreSQL, gleichzeitige Transaktionen effizient zu verarbeiten, während das Latenzdiagramm die Zeit für die Abfrageausführung in Millisekunden veranschaulicht.

PostgreSQL Transaktionen Pro Sekunde (TPS)

PostgreSQL Abfrage-Latenz

Arten von Arbeitslasten

1. Leseintensive Arbeitslasten

Ziel: Testen der Datenbankleistung bei hoher Leseaktivität.

Einrichtung: Verwenden Sie pgbench mit standardmäßigen Lesevorgängen:

Shell

 

bash
pgbench -c 50 -T 120 -S mydb

  • -S: Führen Sie nur SELECT-Abfragen aus.
  • -c 50: Simulieren Sie 50 gleichzeitige Clients.

2. Schreibintensive Arbeitslasten

Ziel: Messen der Datenbankleistung bei häufigen Einfügungen oder Updates.

Einrichtung: Passen Sie den Benchmark an, um Schreibvorgänge einzuschließen:

Shell

 

bash
pgbench -c 20 -j 4 -T 120 -N mydb

  • -N: Führen Sie Abfragen, die keine SELECT-Abfragen sind, aus.

3. Gemischte Lese-/Schreib-Workloads

Ziel: Simulieren Sie einen realen Workload, der Lese- und Schreibvorgänge mischt.

Setup: Verwenden Sie eine ausgewogene Konfiguration:

Shell

 

bash
pgbench -c 30 -j 4 -T 180 mydb

Optimierung von PostgreSQL für bessere Benchmark-Ergebnisse

Speicher-Einstellungen anpassen

Passen Sie diese Parameter in der Datei postgresql.conf an:

Plain Text

 

shared_buffers = 25% of system memory
work_mem = 4MB
maintenance_work_mem = 64MB

Parallele Abfrageausführung aktivieren

Passen Sie diese Parameter in der Datei postgresql.conf an:

Plain Text

 

max_parallel_workers_per_gather = 4

Festplatten-I/O optimieren

Verwenden Sie SSDs für WAL-Dateien und passen Sie diese Einstellungen an:

Plain Text

 

wal_buffers = 16MB
synchronous_commit = off

Beispiel-Ergebnisse und Interpretation

Szenario: 50 gleichzeitige Clients, die einen leseintensiven Workload für 60 Sekunden ausführen.

Ausgabe:

Plain Text

 

tps = 2500.456 (excluding connections establishing)

Interpretation: Die Datenbank ist in der Lage, unter diesem Workload 2500 Transaktionen pro Sekunde zu verarbeiten.

Wenn die TPS niedriger ist als erwartet, analysieren Sie die Abfragepläne mit EXPLAIN ANALYZE, um Leistungsengpässe zu identifizieren.

Abschluss

Das Benchmarking von PostgreSQL ist ein leistungsstarker Weg, um Leistungsgrenzen zu identifizieren und Ihre Datenbank für verschiedene Arbeitslasten zu optimieren. Tools wie pgbench und sysbench, kombiniert mit Erkenntnissen aus pg_stat_statements, ermöglichen es Ihnen, realistische Szenarien zu simulieren und PostgreSQL-Konfigurationen zu feinabstimmen.

Indem Sie diese Tools und Techniken beherrschen, können Sie sicherstellen, dass Ihre PostgreSQL-Instanz eine hohe Leistung für sowohl leseintensive als auch schreiblastige Anwendungen bietet.

Source:
https://dzone.com/articles/how-to-benchmark-postgresql-for-optimal-performance