我有点“偶然”,所以我为一个真正的问题道歉。我在pool_mode = transaction模式下使用pgbouncer。昨天,我开始在我的php日志中获得错误:
不再允许连接(max_client_conn)
我的max_client_conn = 150在我的postgresql.conf中与max_connections匹配。
因此,我的第一个问题是,max_client_conn应该设置为postgresql max_connections,还是完全误解了这种关系?
我在一个postgres实例上有20个默认default_pool_size = 20的pgbouncer实例,那么max_client_conn应该是400吗?(pool_size * number_of_databases)?
谢谢
发布于 2017-09-13 14:41:37
https://pgbouncer.github.io/config.html
max_client_conn允许的最大客户端连接数。 default_pool_size每个用户/数据库对允许多少个服务器连接。
所以max_client_conn应该比postgres max_connections大得多,否则为什么要使用连接池程序呢?
如果有20个数据库,并将default_pool_size设置为20,则允许pgb强将400个连接打开到db,因此需要将posgtres.conf max_connections调整为400,并将pgbouncer max_client_conn设置为smth 4000 (使每个实际db连接在池中平均有10个连接)。
这个答案仅仅是为了提供一个理解设置的例子,而不是作为一个真正需要遵循的语句。(如我刚看到一个配置:
max_client_conn = 10000
default_pool_size = 100
max_db_connections = 100
max_user_connections = 100对于具有两个数据库并将max_connections设置为100的集群而言。这里的逻辑是不同的,还设置了max_db_connections,实际上,在pgbouncer数据库部分中,每个数据库都分别设置了连接限制。
因此,使用小设置来了解配置如何相互影响这是“如何确定pgbouncer的max_client_conn”的最佳方法。
发布于 2019-05-21 15:06:21
就像几乎每个人一样,你会把你的泳池大小设定得很高。不要让postgresql服务器执行连接池。如果你这样做了,你的表现就会受到严重的伤害。
到postgresql的并发连接的最佳设置是
connections = ((core_count * 2) + effective_spindle_count)这意味着,如果您在一个2核心服务器上运行数据库,那么您来自pgbouncer的池的总大小应该不超过5。与postgresql相比,Pgbouncer在处理池方面要好得多,所以让它这样做吧。
所以,让我的postgresql.conf中的postgresql.conf默认为100 (没有理由更改,因为它是最大的)。而且,由于一些日志记录、管理和备份进程也需要连接,所以这应该总是高于应用程序所需要的。)
在您的pgbouncer.ini文件集中
max_db_connections=5
default_pool_size=5
max_client_conn=400https://stackoverflow.com/questions/46198870
复制相似问题