我在Spring Boot(1.5.1.RELEASE)中有一个使用Postgres DB(9.1-901-1)的项目。
当我在生产中运行此应用程序时,它将在DB中创建多达100个空闲连接。
所以我覆盖默认配置来控制创建'N'个空闲连接。请检查以下配置:
datasource:
driverClassName: org.postgresql.Driver
url: jdbc:postgresql://localhost:5432/db_name
username: root
password: root
tomcat:
# default value is 100 but postgres' default is 100 as well. To prevent "PSQLException: FATAL: sorry, too many
# clients already", we decrease the max-active value here. Which should be sufficient, by the way
max-active: 10
max-idle: 10
min-idle: 5
max-wait: 30000
time-between-eviction-runs-millis: 5000
min-evictable-idle-time-millis: 60000
jmx-enabled: true
现在它创建了5个与DB的空闲连接。
我正在通过执行以下查询来验证。
select * from pg_stat_activity;
现在我的问题是,我是否真的需要为生产环境进行5次空闲连接。
如果我更改下面的配置会怎样?这会有没有问题吗?
max-active: 1
max-idle: 1
min-idle: 0
还想知道PgBouncer将如何帮助这个案子?是否有必要为Postgres使用PgBouncer?
答案 0 :(得分:3)
绝对不建议您提出的配置。完整的数据库连接周期将通过
通过与DB保持空闲连接(连接池),您可以节省步骤1-3所花费的时间,从而实现更好的性能。
您应该根据将要连接的微服务的最大实例来调整数据库上的设置。例如如果微服务实例的最大数量为5且服务配置为保持50个空闲连接,则确保您的数据库配置为满足至少250个连接。
要获得微服务的最小连接设置,您需要根据非功能需求和服务负载测试进行一些测试。