首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PgPool + PostgreSQL集群上的高并发性

PgPool + PostgreSQL集群上的高并发性
EN

Stack Overflow用户
提问于 2017-11-15 00:21:33
回答 1查看 906关注 0票数 0

我有一个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

代码语言:javascript
复制
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 = 0

PostgreSQL

代码语言:javascript
复制
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,这似乎是不建议的。有什么建议吗?谢谢!

EN

回答 1

Stack Overflow用户

发布于 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)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47297465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档