我有一个PgPool II集群,其中有2个PostreSQL 9.5后端(4vCores,8gb内存)执行loadbalacing+replication。我的用例是一个只提供SSO登录/注册的网站,是一个相对较小的数据库,查询非常简单,但它需要支持很高的并发性(数千并发用户)。
在添加更多后端之前,我希望确保当前群集的配置是最佳的。使用pgbench (模拟网站正常行为的常规SELECT查询)运行一些测试,即使在LB和后端有大量的CPU/RAM可用时,我也可以不费太大力气就可以重载连接池(pgbench -c 64 -j 4 -t 1000 -f queries.sql)。
以下是相关设置:
pgPool II
listen_backlog_multiplier = 3
connection_cache = on
num_init_children = 62
max_pool = 4
child_life_time = 0
child_max_connections = 0
connection_life_time = 0
client_idle_limit = 0PostgreSQL
max_connections = 256
shared_buffers = 2GB
effective_cache_size = 6GB
work_mem = 8MB
maintenance_work_mem = 512MB
min_wal_size = 1GB
max_wal_size = 2GB
checkpoint_completion_target = 0.7
wal_buffers = 16MB
default_statistics_target = 100增加num_init_children/max_pool将迫使我增加后端的max_connections,这似乎是不建议的。有什么建议吗?谢谢!
发布于 2017-11-17 11:37:31
没有办法比num_init_children的值更多地通过Pgpool实现并发连接。
Pgpool中的num_init_children直接对应于Pgpool可以处理的并发客户端连接的最大数量,因此您不能将num_init_children值设置为低于要支持的最大并发连接。
但是要将max_connections保存在PG端,可以为max_pool配置使用较低的值。作为Pgpool子进程,只有在请求的用户尚未进入缓存时,才会打开一个新的后端连接。如果应用程序只使用一个用户连接到一个数据库,比如user1,db1,那么您可以将max_pool设置为1,并使PG后端的max_connection等于(num_init_children +1)。
https://stackoverflow.com/questions/47297465
复制相似问题