Basic postgresql benchmarking in 10 minutes with pgbench
November 23, 2013
Why benchmark?
Benchmark can be used beforehand to uncover hidden problems. Maybe I forgot to increase connection limit of 100 for a server that is expecting high load, maybe there is not enough resources to handle that many clients, etc, you get the picture.
Why pgbench?
For me there are two things: it is fast to setup, it is simple to use. You can checkout pgbench page on postgresql.org for all options and how it exactly works.
The benchmark
For this benchmark I used 2 droplets on Digital Ocean (refferal link), 8gb for the server and 2gb for a client. Both droplets are running Ubuntu 13.04 and postgresql 9.1 is installed from repos. Pgbench tables where initialized with scale factor 1000 because we will run the benchmark with max 1000 simultaneous connections.
pgbench -i -s 1000
schemaname | relname | n_live_tup
------------+------------------+------------
public | pgbench_accounts | 100000000
public | pgbench_tellers | 10000
public | pgbench_branches | 1000
public | pgbench_history | 0
Default configuration results:
pgbench -c 10 -T 60
Shown on Y axis is number of successful connections in 60 seconds, on the X axis client number. Chart shows us that we hit a limit of 100 concurent connections and also sweet spot for current configuration is around 50 concurrent connections. For the sake of benchmark we raised Postgresql connection limit to 1000. We didn’t do any other tweaks.
Conclusion
Benchmarking Postgresql is vital before deploying your app. It can uncover obvious problems. Please do this, it doesn’t take much time.