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

Close all connections to reduce uptime on Cloud SQL instance

上下文

我是 运行 最小云 SQL 实例 n1-standard-1 上的一个 postgres 数据库(1 CPU,3.75 GB内存,10 GB SSD 存储)。我使用 sqlalchemy 通过 App Engine 上的烧瓶应用程序 运行 访问它。我的平台上只有 20 个用户,数据库使用率非常低(每天大约 100 个查询)。

问题

Sqlalchemy 为更高效的查询创建连接池。这意味着我的应用程序与我的数据库建立的连接是持久的,即使 flask 应用程序处于休眠状态。只要有连接,Cloud SQL 实例就会保持运行。所以我为无用的正常运行时间付出了代价。 Cloud SQL 实例目前每月花费我 60 美元。我想减少这个。

尝试过的解决方案

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

感谢您的帮助。

Cloud SQL 发布了有关如何管理连接的示例,包括 SQLAlchemey here。正如另一条评论中提到的,您还可以使用 [NullPool][2] class,它不会合并连接。

然而,值得指出的是,Gen 2 Cloud SQL 实例没有 'serverless' 功能 - 即使没有连接,它们也是 运行。如果您想要真正的 'serverless' 按使用付费的产品,您可以使用 Cloud Firestore. If you would prefer to stick with a relational database, you could downgrade your instance size to either a db-f1-micro or db-g1-small instance size - which are considerably cheaper (see pricing 之类的东西。