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:
- Die Durchsatzrate und Latenz Ihrer Datenbank unter spezifischen Workloads zu messen.
- Hardware- oder Konfigurationsengpässe zu identifizieren.
- Den Einfluss von Optimierungen wie Indexänderungen oder Abfrageumformulierungen zu vergleichen.
- 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:
bash
pgbench --version
Erste Schritte
1. Initialisieren einer Benchmark-Datenbank:
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:
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:
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:
bash
sudo apt-get install sysbench
Erste Schritte
1. Bereiten Sie den Benchmark vor:
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:
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
:
shared_preload_libraries = 'pg_stat_statements'
2. Laden Sie die Konfiguration neu und erstellen Sie die Erweiterung:
CREATE EXTENSION pg_stat_statements;
Verwendung
Führen Sie die folgende Abfrage aus, um lang laufende Anweisungen zu identifizieren:
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:
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:
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:
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:
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:
max_parallel_workers_per_gather = 4
Festplatten-I/O optimieren
Verwenden Sie SSDs für WAL-Dateien und passen Sie diese Einstellungen an:
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:
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