>上下文
我在Cloud Run上运行一个SpringBoot应用程序,该应用程序使用Hikari连接池连接到postgres11 CloudSQL数据库。我正在使用最小的 PSQL 实例(1vcpu/614mb/25 连接限制(。对于设置,我遵循了以下资源:
从云运行连接到云 SQL
管理数据库连接
问题
部署第三个修订版后,出现以下错误:
FATAL: remaining connection slots are reserved for non-replication superuser connections
我发现了什么
-
默认连接池大小为 10,因此它在第三次部署(30> 25(失败。
-
删除旧修订版时,Cloud SQL 管理面板中显示的活动连接将减少 10,下一次部署将成功。
问题
看起来,旧的Cloud Run修订版一直处于"冷"状态,维护其连接池。有没有办法在不删除修订的情况下关闭这些连接?
在最佳实践部分,它说:
。我们建议您使用支持连接池的客户端库,这些连接池会自动重新连接断开的客户端连接。
在 Cloud Run 中管理连接池的推荐方法是什么,因为旧版本似乎以某种方式设法保持其连接?
谢谢!
目前,Cloud Run 不提供任何保证,说明它在启动后会保持温暖多长时间。不使用时,实例会因不一定关闭而受到严重限制。 因此,您有一些修订,即使不是定向流量,也会阻止连接。
即使在这种情况下,我也不同意您应该避免使用连接池的想法。连接池可以降低延迟、提高稳定性,并有助于设置打开连接数的上限。或者,您可以使用以下一些配置选项来帮助检查池:
minimumIdle
- 此属性控制 HikariCP 尝试在池中维护的最小空闲连接数。如果空闲连接低于此值,并且池中的连接总数小于最大池大小,HikariCP 将尽最大努力快速有效地添加其他连接。
maximumPoolSize
- 此属性控制允许池达到的最大大小,包括空闲连接和使用中的连接。
idleTimeout
- 此属性控制允许连接在池中空闲的最长时间。仅当 minimumIdle 定义为小于 maxumPoolSize 时,此设置才适用。一旦池达到最小空闲连接数,空闲连接将不会停用。
如果将minimumIdle
设置为 0,则应用程序仍能够一次使用最多maximumPoolSize
个连接。但是,一旦连接在池中空闲idleTimeout
秒,它就会关闭。如果将idleTimeout
设置为较小的值(如 1 分钟(,它将允许池使用的连接数在不使用时缩减为 0。
希望这有帮助!
这里的问题是连接在打开时不会被 HikariCP 关闭。我对光了解不多,但我发现这解释了如何通过光处理连接。我希望这有所帮助!