Lymeno
← 全部文章

产品2 分钟阅读

按需数据库如何暂停与唤醒

按需数据库在没有连接时会发生什么、第一个连接需要多长时间唤醒它,以及如何为这两种情况配置客户端。

Agent 创建的大多数数据库只会忙碌几分钟,之后便处于空闲状态:没人查看的预览环境、只用于一项任务的临时数据库、一小时前就已结束的测试。按需数据库正是为这种场景设计的:没有连接时自动暂停,客户端再次连接时自动唤醒,中间无需调用任何 API。

数据库何时暂停

按需数据库在约 10 分钟内没有任何连接后暂停。任何已打开的连接都算作活动,包括应用连接池保留的空闲连接。

数据库暂停期间不收取计算费用,存储仍按您配置的容量计费。当前价格请参阅定价。如果某个数据库需要保持运行,可以为它关闭自动暂停。

如果希望应用的数据库能够暂停,请确保连接池会关闭空闲连接。以 node-postgres 为例:

import pg from "pg";

const pool = new pg.Pool({
  connectionString: process.env.DATABASE_URL,
  idleTimeoutMillis: 30_000, // 关闭空闲超过 30 秒的连接
  connectionTimeoutMillis: 15_000, // 为数据库唤醒留出时间
});

下一个连接到达时

新的连接会唤醒数据库,无需事先调用 API。根据我们的实测,连接到已暂停数据库的第一个连接约 7 秒完成。在此期间连接会等待而不会失败,客户端看到的只是一次较慢但正常的连接。

通常唯一需要调整的是客户端的连接超时。请将其设置为至少 15 秒,避免暂停后的第一个连接超时:

  • node-postgres:如上例设置 connectionTimeoutMillis: 15000。
  • 基于 libpq 的客户端(如 psql):在连接字符串中添加 connect_timeout=15,或设置 PGCONNECT_TIMEOUT=15。
  • Prisma:在连接字符串中添加 connect_timeout=15。

数据库运行后建立的连接与平常一样快。

运行期间如何扩展计算资源

运行期间,按需数据库会在您设定的最小值和最大值之间自动扩展计算资源,单位为计算单元(CU)。最小值可低至 0.5 CU,最大值最高可达 14 CU(视地域而定)。新数据库默认范围为 0.5–2 CU,适合大多数 Agent 工作负载,您可以随时调整。

何时改用常驻数据库

如果空闲时间较多,且可以接受第一个连接多等几秒,按需数据库是合适的选择。以下情况请选择常驻数据库:

  • 每个连接都必须快速建立,包括安静一段时间后的第一个连接。
  • 需要带副本的高可用性。
  • 应用依赖连接池。常驻数据库在 6432 端口提供 PgBouncer 连接池;按需数据库接受 5432 端口的直接连接。
  • 工作负载需要 owner、pg_monitor 和 pg_signal_backend 之外的权限,按需数据库目前只支持这三种角色。

两种选项均为标准 PostgreSQL,您可以先使用按需数据库,在项目增长后通过 pg_dump 和 pg_restore 迁移到常驻数据库。

为您的 Agent 创建第一个数据库

注册并创建 API 令牌即可开始。