Πώς κάνουμε Performance Testing στη PostgreSQL με το pgbench

- Πώς κάνουμε Performance Testing στη PostgreSQL με το pgbench - 9 Σεπτέμβριος 2026
- Πώς βρίσκουμε με ένα query τα alerts σε PostgreSQL μέσα από τα Plain Text Logs - 7 Σεπτέμβριος 2026
- Πώς βλέπουμε πόσο γίνονται χρήση τα Indexes στη PostgreSQL - 4 Σεπτέμβριος 2026
Το pgbench είναι ένα από τα πιο χρήσιμα εργαλεία της PostgreSQL. Χρησιμοποιείται για benchmarking και stress testing της βάσης δεδομένων, προσομοιώνοντας πολλαπλά ταυτόχρονα transactions (TPS).
Σε αυτό το άρθρο θα δούμε πώς μπορούμε να το στήσουμε, να τρέξουμε τα πρώτα μας benchmarks και να αξιοποιήσουμε προσαρμοσμένα scripts για πιο ρεαλιστικά σενάρια.
Η εγκατάσταση
Πριν τρέξουμε οποιοδήποτε test, το pgbench χρειάζεται να δημιουργήσει έναν τυπικό αριθμό πινάκων. Για να γίνει αυτό τρέχουμε την παρακάτω εντολή απο το τερματικό αφού πρώτα συνδεθούμε με τον χρήστη postgres:
su postgres pgbench -i -s 10 db_test
-i: Δηλώνει την εντολή initialize.-s 10: Ορίζει τον scale factor. Ένα scale factor 1 δημιουργεί 100.000 rows στους βασικούς πίνακες. Με το 10 θα δημιουργηθούν περίπου 1 εκατομμύριο γραμμές στον πίνακαpgbench_accounts, αυξάνοντας το μέγεθος της βάσης για πιο αντιπροσωπευτικά αποτελέσματα.
Μετά την ολοκλήρωση, βλέπουμε τέσσερις νέους πίνακες: pgbench_accounts, pgbench_branches, pgbench_history, και pgbench_tellers.
Εκτέλεση του Standard Benchmark
Αφού η βάση δεδομένων είναι έτοιμη, μπορούμε να εκτελέσουμε ένα βασικό τεστ απόδοσης. Ας υποθέσουμε ότι θέλουμε να δοκιμήσουμε με 50 ταυτόχρονους clients (-c), χρησιμοποιώντας 2 threads (-j), για συνολικό χρόνο 60 δευτερολέπτων (-T):
pgbench -c 50 -j 2 -T 60 db_test
-c clients: Ο αριθμός clients που συνδέονται ταυτόχρονα.-j threads: Ο αριθμός worker threads που θα χρησιμοποιηθούν στο λειτουργικό (καλό είναι να ταιριάζει με τους διαθέσιμους πυρήνες CPU).-T seconds: Η διάρκεια του τεστ σε δευτερόλεπτα. Εναλλακτικά, αντί για χρόνο, μπορείτε να ορίσετε συγκεκριμένο αριθμό συναλλαγών ανά client με την παράμετρο-t.
Τα αποτελέσματα
Μετά το τέλος του test, το pgbench εμφανίζει μία αναφορά:

- TPS (Transactions Per Second): Ο σημαντικότερος δείκτης απόδοσης. Δείχνει πόσες συναλλαγές ολοκληρώθηκαν ανά δευτερόλεπτο.
- Latency Average: Ο μέσος χρόνος που χρειάστηκε για να ολοκληρωθεί μια συναλλαγή.
Χρήση Custom Scripts
Το standard benchmark είναι καλό για γενικούς ελέγχους CPU και Ι/Ο αλλά σπάνια ταιριάζει ακριβώς στα queries της δικιάς μας εφαρμογής, το pgbench επιτρέπει να τρέξουμε τα δικά μας custom sql scripts.
Δημιουργήστε ένα αρχείο, π.χ. custom_workload.sql:
\set aid random(1, 100000 * 10) SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
Τρέξτε το benchmark χρησιμοποιώντας το αρχείο σας με την παράμετρο -f:
pgbench -c 20 -T 30 -f custom_workload.sql db_test

Κλείνοντας να πούμε ότι το pgbench είναι ένα εξαιρετικά ελαφρύ και ισχυρό εργαλείο. Μας επιτρέπει να μετρήσουμε γρήγορα την απόδοση της υποδομής μας, να δοκιμάσουμε αλλαγές στο postgresql.conf όπως shared_buffers, effective_cache_size, work_mem και να αξιολογήσουμε τη συμπεριφορά της βάσης δεδομένων υπό πίεση πριν περάσουμε σε περιβάλλοντα παραγωγής.

