关闭所有连接以减少云 SQL 实例的正常运行时间



>上下文

我正在最小的云SQL实例n1-standard-1(1CPU,3.75 GB RAM,10 GB SSD存储)上运行postgres db。我通过运行在App Engine上的烧瓶应用程序使用sqlalchemy访问它。我的平台上只有 20 个用户,数据库的使用非常稀少(每天 ~100 次查询)。

问题

Sqlalchemy 为性能更高的查询创建一个连接池。这意味着我的应用程序与我的数据库建立的连接是持久的,即使烧瓶应用程序处于休眠状态也是如此。只要有连接,云 SQL 实例就会保持运行状态。所以我正在为无用的正常运行时间付费。Cloud SQL 实例目前每月收费 60 美元。我想减少这一点。

尝试的解决方案

我开始寻找通过 sqlalchemy 关闭所有连接的方法。我找到的唯一解决方案是在我的烧瓶应用程序上禁用连接池。这将防止连接持久化。我对这种方法的恐惧是它偏离了人迹罕至的道路(我正在使用 Flask-SQLAlchemy,它没有公开底层 sqla poolclass 选项(链接)。所以我对在生产中实现它持谨慎态度。

谢谢你的帮助。

Cloud SQL发布了有关如何管理连接的示例,包括此处的SQLAlcheey。如另一条评论所述,您还可以使用[NullPool][2]类,该类不池化连接。

但是,值得指出的是,Gen 2 Cloud SQL 实例没有"无服务器"功能 - 即使没有连接到它,它们也会运行。如果你想要一个真正的"无服务器"产品,按使用付费,你可以使用像Cloud Firestore这样的东西。如果您希望坚持使用关系数据库,则可以将实例大小降级为db-f1-microdb-g1-small实例大小 - 这要便宜得多(请参阅定价)。

最新更新