我真的需要 Postgres 中的空闲连接吗?
Do I realy need Idle Connection in Postgres?
我在 Spring Boot (1.5.1.RELEASE) 中有一个项目正在使用 Postgres DB (9.1-901-1)。
虽然我 运行 这个应用程序正在生产中,但它会在数据库中创建多达 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 个到数据库的空闲连接。
我正在通过执行以下查询来验证这一点。
select * from pg_stat_activity;
现在我的问题是,生产环境真的需要 5 个空闲连接吗?
如果我像下面这样更改我的配置会发生什么?这会不会有任何问题?
max-active: 1
max-idle: 1
min-idle: 0
并且还想知道 PgBouncer 将如何帮助解决这个问题? Postgres 有必要安装 PgBouncer 吗?
您提出的配置绝对不推荐。一个完整的数据库连接周期将经历
- 建立TCP连接
- 验证凭据
- 连接准备就绪
- 执行命令
- 断开连接
通过维护与数据库的空闲连接(连接池),您可以节省步骤 1-3 所花费的时间,从而获得更好的性能。
您应该根据将连接的微服务的最大实例数调整数据库上的设置。例如如果微服务实例的最大数量为 5,并且服务配置为保持 50 个空闲连接,则确保您的数据库配置为满足至少 250 个连接。
要获得微服务的最小连接设置,您需要根据您的非功能性要求对服务进行一些测试和负载测试。
我在 Spring Boot (1.5.1.RELEASE) 中有一个项目正在使用 Postgres DB (9.1-901-1)。
虽然我 运行 这个应用程序正在生产中,但它会在数据库中创建多达 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 个到数据库的空闲连接。
我正在通过执行以下查询来验证这一点。
select * from pg_stat_activity;
现在我的问题是,生产环境真的需要 5 个空闲连接吗?
如果我像下面这样更改我的配置会发生什么?这会不会有任何问题?
max-active: 1
max-idle: 1
min-idle: 0
并且还想知道 PgBouncer 将如何帮助解决这个问题? Postgres 有必要安装 PgBouncer 吗?
您提出的配置绝对不推荐。一个完整的数据库连接周期将经历
- 建立TCP连接
- 验证凭据
- 连接准备就绪
- 执行命令
- 断开连接
通过维护与数据库的空闲连接(连接池),您可以节省步骤 1-3 所花费的时间,从而获得更好的性能。
您应该根据将连接的微服务的最大实例数调整数据库上的设置。例如如果微服务实例的最大数量为 5,并且服务配置为保持 50 个空闲连接,则确保您的数据库配置为满足至少 250 个连接。
要获得微服务的最小连接设置,您需要根据您的非功能性要求对服务进行一些测试和负载测试。