Client-Last mit pgbench simulieren
Um das Connection Pooling in Aktion zu beobachten, verwenden Sie pgbench, ein Standard-Benchmarking-Tool, das mit PostgreSQL geliefert wird. pgbench kann mehrere Clients simulieren, die gleichzeitig auf die Datenbank zugreifen.
Zuerst müssen Sie die pgbench-Umgebung initialisieren. Dies erstellt einige Tabellen und füllt sie mit Beispieldaten. Führen Sie den folgenden Befehl aus und stellen Sie sicher, dass Sie sich über den PgBouncer-Port (6432) verbinden.
pgbench -i -h 127.0.0.1 -p 6432 -U postgres postgres
Sie werden nach dem Passwort (labex_password) gefragt. Das Flag -i initialisiert die Datenbank für Benchmarking. Sie sollten eine Ausgabe sehen, die anzeigt, dass die Tabellen erstellt und gefüllt wurden.
dropping old tables...
NOTICE: table "pgbench_accounts" does not exist, skipping
NOTICE: table "pgbench_branches" does not exist, skipping
NOTICE: table "pgbench_history" does not exist, skipping
NOTICE: table "pgbench_tellers" does not exist, skipping
creating tables...
generating data (client-side)...
100000 of 100000 tuples (100%) done (elapsed 0.01 s, remaining 0.00 s)
vacuuming...
creating primary keys...
done in 0.13 s (drop tables 0.00 s, create tables 0.00 s, client-side generate 0.06 s, vacuum 0.04 s, primary keys 0.02 s).
Führen Sie nun das Benchmark aus, um eine Last zu simulieren. Der folgende Befehl simuliert 10 gleichzeitige Clients (-c 10), wobei jeder Client 300 Transaktionen ausführt (-t 300).
pgbench -c 10 -t 300 -h 127.0.0.1 -p 6432 -U postgres postgres
Geben Sie erneut das Passwort ein, wenn Sie dazu aufgefordert werden. Das Benchmark wird einige Sekunden laufen und dann eine Zusammenfassung der Ergebnisse anzeigen, einschließlich der Anzahl der Transaktionen pro Sekunde (tps).
pgbench (14.18 (Ubuntu 14.18-0ubuntu0.22.04.1))
starting vacuum...end.
transaction type: <builtin: TPC-B (sort of)>
scaling factor: 1
query mode: simple
number of clients: 10
number of threads: 1
number of transactions per client: 300
number of transactions actually processed: 3000/3000
latency average = 5.935 ms
initial connection time = 1.342 ms
tps = 1685.027854 (without initial connection time)
Dieser Test hat erheblichen Datenverkehr über PgBouncer erzeugt, den wir im nächsten Schritt untersuchen werden.