我真的需要在Postgres中进行空闲连接吗?

时间:2018-04-19 09:56:12

标签: database postgresql spring-boot postgresql-9.1 pgbouncer

我在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?

1 个答案:

答案 0 :(得分:3)

绝对不建议您提出的配置。完整的数据库连接周期将通过

  1. 建立TCP连接
  2. 验证凭据
  3. 连接准备就绪
  4. 执行命令
  5. 断开
  6. 通过与DB保持空闲连接(连接池),您可以节省步骤1-3所花费的时间,从而实现更好的性能。

    您应该根据将要连接的微服务的最大实例来调整数据库上的设置。例如如果微服务实例的最大数量为5且服务配置为保持50个空闲连接,则确保您的数据库配置为满足至少250个连接。

    要获得微服务的最小连接设置,您需要根据非功能需求和服务负载测试进行一些测试。