I'm sort of an "accidental dba" so apologies for a real noob question here. I'm using pgbouncer in pool_mode = transaction mode. Yesterday I started getting errors in my php log:
no more connections allowed (max_client_conn)
I had max_client_conn = 150 to match max_connections in my postgresql.conf.
So my first question is, should pgbouncer max_client_conn be set equal to postgresql max_connections, or am I totally misunderstanding that relationship?
I have 20 databases on a single postgres instance behind pgbouncer with the default default_pool_size = 20. So should max_client_conn be 400? (pool_size * number_of_databases)?
Thanks
https://pgbouncer.github.io/config.html
so max_client_conn should be way larger then postgres
max_connections, otherwise why you use connection pooler at all?..If you have 20 databases and set default_pool_size to 20, you will allow pgbouncer to open 400 connections to db, so you need to adjust posgtres.conf
max_connectionsto 400 and set pgbouncermax_client_connto smth like 4000 (to have average 10 connections in pool for each actual db connection)This answer is only meant to provide an example for understanding the settings, not as a statement to literally follow. (eg I just saw a config with:
for cluster with two databases and max_connections set to 100). Here the logic is different, also mind
max_db_connectionsis set and in fact connection limits are set individually per database in pgbouncer [database] section.So - play with small settings to get the idea of how config influence each other - this is "how to determine max_client_conn for pgbouncer" the best