如何关闭旧 Cloud 运行 修订版的 SQL 连接?
How to close SQL connections of old Cloud Run revisions?
上下文
我是 运行 Cloud 运行 上的 SpringBoot 应用程序,它使用 Hikari 连接池连接到 postgres11 CloudSQL 数据库。我正在使用最小的 PSQL 实例(1vcpu/614mb/25 连接限制)。对于设置,我遵循了这些资源:
Connecting to Cloud SQL from Cloud Run
问题
部署第三个修订版后,出现以下错误:
FATAL: remaining connection slots are reserved for non-replication superuser connections
我发现了什么
默认连接池大小为 10,因此它在第三次部署 (30 > 25) 时失败。
删除旧修订时,云 SQL 管理面板中显示的活动连接数减少 10,下一次部署成功。
问题
看来,旧的 Cloud 运行 修订版正在保持 "cold" 状态,维护它们的连接池。有没有办法在不删除修订的情况下关闭这些连接?
在 best practices 部分说:
...we recommend that you use a client library that supports connection pools that automatically reconnect broken client connections."
在云中管理连接池的推荐方法是什么 运行,因为旧版本似乎以某种方式设法维持它们的连接?
谢谢!
这里的问题是连接在打开时不会被 HikariCP 关闭。我对 Hikari 了解不多,但我发现 解释了如何通过 Hikari 处理连接。希望对您有所帮助!
目前,Cloud 运行 无法保证它在启动后能保持温暖的时间。不使用时,实例会因不一定关闭而受到严重限制。因此,您有一些修订即使在没有定向流量的情况下也会阻止连接。
即使在这种情况下,我也不同意您应该避免使用连接池的想法。连接池可以降低延迟,提高稳定性,并有助于对打开的连接数设置上限。或者,您可以使用以下一些配置选项来帮助控制您的池:
minimumIdle
- 此 属性 控制 HikariCP 尝试在池中维护的最小空闲连接数。如果空闲连接低于这个值并且池中的总连接小于 maximumPoolSize,HikariCP 将尽最大努力快速有效地添加额外的连接。
maximumPoolSize
- 此 属性 控制允许池达到的最大大小,包括空闲和使用中的连接。
idleTimeout
- 此 属性 控制允许连接在池中闲置的最长时间。此设置仅在 minimumIdle 定义为小于 maximumPoolSize 时适用。一旦池达到最小空闲连接数,空闲连接将不会被淘汰。
如果将 minimumIdle
设置为 0,您的应用程序仍然可以同时使用最多 maximumPoolSize
个连接。但是,一旦连接在池中空闲 idleTimeout
秒,它将被关闭。如果您将 idleTimeout
设置为 1 分钟之类的小值,它将允许您的池正在使用的连接数在不使用时缩减为 0。
希望对您有所帮助!
上下文
我是 运行 Cloud 运行 上的 SpringBoot 应用程序,它使用 Hikari 连接池连接到 postgres11 CloudSQL 数据库。我正在使用最小的 PSQL 实例(1vcpu/614mb/25 连接限制)。对于设置,我遵循了这些资源:
Connecting to Cloud SQL from Cloud Run
问题
部署第三个修订版后,出现以下错误:
FATAL: remaining connection slots are reserved for non-replication superuser connections
我发现了什么
默认连接池大小为 10,因此它在第三次部署 (30 > 25) 时失败。
删除旧修订时,云 SQL 管理面板中显示的活动连接数减少 10,下一次部署成功。
问题
看来,旧的 Cloud 运行 修订版正在保持 "cold" 状态,维护它们的连接池。有没有办法在不删除修订的情况下关闭这些连接?
在 best practices 部分说:
...we recommend that you use a client library that supports connection pools that automatically reconnect broken client connections."
在云中管理连接池的推荐方法是什么 运行,因为旧版本似乎以某种方式设法维持它们的连接?
谢谢!
这里的问题是连接在打开时不会被 HikariCP 关闭。我对 Hikari 了解不多,但我发现
目前,Cloud 运行 无法保证它在启动后能保持温暖的时间。不使用时,实例会因不一定关闭而受到严重限制。因此,您有一些修订即使在没有定向流量的情况下也会阻止连接。
即使在这种情况下,我也不同意您应该避免使用连接池的想法。连接池可以降低延迟,提高稳定性,并有助于对打开的连接数设置上限。或者,您可以使用以下一些配置选项来帮助控制您的池:
minimumIdle
- 此 属性 控制 HikariCP 尝试在池中维护的最小空闲连接数。如果空闲连接低于这个值并且池中的总连接小于 maximumPoolSize,HikariCP 将尽最大努力快速有效地添加额外的连接。
maximumPoolSize
- 此 属性 控制允许池达到的最大大小,包括空闲和使用中的连接。
idleTimeout
- 此 属性 控制允许连接在池中闲置的最长时间。此设置仅在 minimumIdle 定义为小于 maximumPoolSize 时适用。一旦池达到最小空闲连接数,空闲连接将不会被淘汰。
如果将 minimumIdle
设置为 0,您的应用程序仍然可以同时使用最多 maximumPoolSize
个连接。但是,一旦连接在池中空闲 idleTimeout
秒,它将被关闭。如果您将 idleTimeout
设置为 1 分钟之类的小值,它将允许您的池正在使用的连接数在不使用时缩减为 0。
希望对您有所帮助!