AbortSignal 能取消 Node.js 的数据库查询吗:五个驱动实测
来源:dev.to — 2026-11-02
📋 概述
作者用 4 条连接的连接池,让 12 个 Node.js 客户端中途放弃查询。被放弃的查询仍然占满连接约 6 秒,之后第一个健康的 select 1 排了 5.7 秒才拿到结果。在测的五个驱动版本里,只有 postgres.js 4.0.0 会读取查询上的 AbortSignal,pg、mysql2、mariadb 和 postgres.js 3.4.9 都不理会;要真正停掉前者,得调用 pg_cancel_backend。
🔑 核心要点
- 放弃请求不等于数据库停止工作,连接仍被占着,健康查询只能排队。
- 朴素堆积测试中,12 个被放弃的请求造成约 24 连接秒的标记查询活动。
- 同时取消在跑的查询并跳过尚未开始的查询,首个健康查询可降到 1 至 107 毫秒。
- postgres.js 3.4.9 出现过四个被取消却永不 settle 的 promise,作者为此重写了计数方式。
💡 金句
“Passing an AbortSignal to the query did nothing for pg, mysql2 or mariadb”
译:把 AbortSignal 传给查询,对 pg、mysql2 和 mariadb 毫无作用。
👍 0
👎 0
← 返回 dev.to 首页