按需数据库如何暂停与唤醒
按需数据库在没有连接时会发生什么、第一个连接需要多长时间唤醒它,以及如何为这两种情况配置客户端。
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 迁移到常驻数据库。