【发布时间】:2021-05-21 00:09:13
【问题描述】:
我正在开发一个 Spring Boot 服务来发布数据并将其保存在 GCP SQL Postgres 数据库中。 问题是,当我通过请求对服务施加压力时,我得到一个关于消耗所有可用连接的 SQL 异常:
"FATAL: remaining connection slots are reserved for non-replication superuser connections"
我发现了这个问题,我添加了一个适当的 hikari 配置来限制使用的连接并设置关闭空闲连接的时间限制,这是我的 properties.yml 配置:
type: com.zaxxer.hikari.HikariDataSource
hikari:
initializationFailTimeout: 30000
idle-timeout: 30000
minimum-idle: 5
maximum-pool-size: 15
connection-timeout: 20000
max-lifetime: 1000
当我使用相同的数据库在本地运行该服务时,该服务可以正常工作,但是当我从我的云设置运行它时,它会消耗所有可用的连接,然后得到相同的异常。
重要提示!我正在使用 SQL 云代理连接到数据库。
以下是数据库可用连接的屏幕截图:
1- 运行服务之前
2-本地运行服务后
【问题讨论】:
-
您有多个连接的服务实例,或者您在需要时重新创建数据源(或整个应用程序)。通常这些错误来自后者,但是当涉及到云环境时,您可能会使用自动缩放功能。
-
@M.Deinum 这是 1 个没有副本的实例,但我开始在 SQL 代理连接中确定问题的范围(至少这是我在一些修复和尝试尝试后的猜测)。会不会是 SQL Proxy 会弄乱 hikari 的配置?
-
我使用过 Cloud SQL 代理,但从未遇到过此类问题。如果您尝试在不使用 Proxy 的情况下连接 Cloud SQL,是否会出现同样的错误?
标签: spring postgresql spring-boot google-cloud-platform hikaricp