Database 在Postgres中我真的需要空闲连接吗?
我在SpringBoot(1.5.1.RELEASE)中有一个项目,它使用PostgresDB(9.1-901-1) 当我在生产环境中运行此应用程序时,它将创建多达100个以DB为单位的空闲连接 因此,我覆盖默认配置以控制创建“N”个空闲连接。请检查以下配置:Database 在Postgres中我真的需要空闲连接吗?,database,postgresql,spring-boot,postgresql-9.1,pgbouncer,Database,Postgresql,Spring Boot,Postgresql 9.1,Pgbouncer,我在SpringBoot(1.5.1.RELEASE)中有一个项目,它使用PostgresDB(9.1-901-1) 当我在生产环境中运行此应用程序时,它将创建多达100个以DB为单位的空闲连接 因此,我覆盖默认配置以控制创建“N”个空闲连接。请检查以下配置: datasource: driverClassName: org.postgresql.Driver url: jdbc:postgresql://localhost:5432/db_name username: root
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?您建议的配置绝对不推荐。一个完整的数据库连接周期将完成
要获得微服务的最小连接设置,您需要根据非功能性需求进行一些测试,并对服务进行负载测试。如果您想要一个反应缓慢的应用程序,这是最好的选择。创建到数据库的连接是一项耗时的操作,因此您希望使用连接池并重用现有连接。这些连接在实际使用之前是空闲的。如果您将其配置为没有空闲连接(或最小/最大连接),则基本上可以绕过连接池。实际使用的值取决于您的站点及其使用方式。在我工作的一个站点上,我们在启动时有75个空闲连接,它们在正常的一天中占90%左右。但在高峰时期,情况就超过了这一点。这是为表现而作的调整。这是一个测试,一个小站点,然后继续。这是生产站点。。因此,我认为我必须使用更多的空闲连接在我看来,最好的方法是对应用程序的数据库使用情况进行基准测试,以确定适合您的情况的空闲连接数。将最大和最小空闲设置为100,并监控使用情况。如果您的应用程序最多使用10个连接(其中90个保持空闲),那么将最小空闲设置为10,最大空闲设置为20就足够了。因此,答案是,我需要根据需要和性能设置大量空闲连接。让我和我的DBA团队一起进行一些研发,并找出连接的数量。