Cloudflare D1 免费额度触顶后会怎样?查询将直接停止

Cloudflare D1 免费额度现会在每日读取 500 万行或写入 100,000 行后停止查询。本文拆解配额触顶后的报错方式、00:00 UTC 重置窗口、行扫描成本、监控与预警方案,以及何时应升级至每个账户每月 $5 起的 Workers Paid,让团队在生产中断前做出明确决策。

Wednesday, September 2, 2026Omid Saffari
Cloudflare D1 免费额度触顶后会怎样?查询将直接停止

从 2026 年 9 月 1 日起,Cloudflare D1 免费额度不再只是用量问题,而是会直接影响生产可用性的技术决策。账户一天内读取达到 500 万行或写入达到 100,000 行后,D1 查询可能停止,直至 UTC 零点。

Cloudflare D1 免费额度没变,触顶后的处理变了

免费配额早已有之。现在改变的是配额用尽后会发生什么。

在 Workers Free 上,只要任一每日额度被用尽,D1 就会同时通过 Workers Binding API 和 REST API 拒绝查询。Cloudflare 针对读取和写入上限分别给出了报错信息,并说明配额在 00:00 UTC 重置后,查询才会恢复。已存储的数据依然完好,但应用可能无法读取或修改这些数据。

这正是问题的核心:原本只是软性的用量数字,如今成了决定服务可用性的硬边界。

达到每日上限时,Cloudflare 会发送电子邮件。它能解释事故为何发生,却是在数据库已经不可用之后才到达。生产团队需要的是预算和更早的预警,而不只是故障发生后的说明。9 月 1 日的 D1 更新日志 列出了确切的失败行为和错误文本。

Workers Paid 不受这项每日停用规则影响。只要原型始终远低于两项额度,现在未必需要迁移;但对于依赖 D1 的线上产品,Free 必须像任何存在停机点的资源一样管理。

Cloudflare D1 查询限制真正计算的是扫描行数

读取额度不是 500 万次 API 调用,也不是返回 500 万条记录,而是数据库为完成查询而扫描的 500 万行

假设某个筛选只返回一位客户,但没有可用的索引。D1 可能需要扫描一张包含 5,000 行的表才能找到这条记录。这样的查询运行 1,000 次,就会耗尽每天 500 万行的读取额度。结果看起来很小,底层付出的工作量却不小。

写入的计算更直接。INSERTUPDATEDELETE 会按发生变更的行数计入写入量。一次插入 10 行,就算写入 10 行。CREATEALTERDROP 等架构操作也可能同时消耗读取和写入额度。

行大小不会改变这个计数。1 KB 的行和 100 KB 的行都各算一行;真正影响读取数字的是查询方式。

索引让 D1 直接定位相关记录,无需扫描整张表。通常代价是增加少量写入,却能大幅减少读取。写入一个被索引覆盖的列时,D1 会写入表记录以及至少一条索引记录。因此,应该为频繁用于筛选和连接的列建立索引,而不是给所有列一股脑加索引。

Cloudflare 的索引指南提供了一个直接的检查方法:在高成本查询前加上 EXPLAIN QUERY PLAN。执行计划显示 SCAN,说明正在扫描表;显示 SEARCH ... USING INDEX,说明查询使用了索引。添加索引后,再运行 PRAGMA optimize,让查询规划器掌握最新统计信息。

真正变化的是业务账

Workers Free 仍然是 $0。变化在于代价:数据库账单的上限仍是零,但数据库可能在 UTC 当天剩余时间里停止为应用提供服务。

Workers Paid 的起步价是每个账户每月 $5。它用按月计算的包含用量和超额计费,替代了每日硬停止。

决策项Workers FreeWorkers Paid
读取行数每天 500 万行,之后查询停止每月前 250 亿行包含在内,之后每 100 万行 $0.001
写入行数每天 100,000 行,之后查询停止每月前 5,000 万行包含在内,之后每 100 万行 $1.00
存储空间总计 5 GB前 5 GB 包含在内,之后 $0.75/GB-month
基础套餐$0每个账户每月至少 $5

从 Free 升到 Paid 的跨度比乍看之下更大。连续 30 天用满 Free 的读取额度,总计是 1.5 亿行,只占 Paid 套餐每月所含 250 亿行读取量的 0.6%。连续 30 天用满 Free 的写入额度,总计是 300 万行,相当于每月所含 5,000 万行写入量的 6%。

因此,对许多小型应用来说,第一次付费并不是为了超额用量,而是花 $5 购买可用性。Workers 请求、CPU、超过 5 GB 的 D1 存储空间以及其他 Cloudflare 产品仍有各自的计量方式,所以 $5 只是下限,并不代表整个账户的费用一定恰好是 $5。更完整的 Cloudflare 定价评测梳理了账户与各产品计费边界之间的区别。

D1 不收取数据传输费或吞吐量费用。这并不能减轻 Free 触顶后的影响,只说明在这项决策中无需考虑出口流量费用。

四类团队,四种务实做法

运营线上 SaaS 的独立开发者

如果登录、账单状态或客户控制台需要读取 D1,那么 Free 套餐已经把生产停机风险带进了业务。先找出正常运营时最繁忙的一天,再修复所有全表扫描。如果应用仍然接近上限,每月最低 $5 的成本,也比面对无法预知会持续多少小时的数据库中断更划算。

它的价值并不是抽象意义上的数据库容量增加,而是把“等到 UTC 零点”从事故恢复方案中删掉。

一个账户管理多个数据库的代理服务商

限制条款针对的是账户级别。代理服务商应盘点该 Cloudflare 账户下的每一个 D1 数据库,而不是只检查某个客户项目就认定整个账户安全。

先用每个数据库的指标找出用量异常的项目,再汇总所有数据来设定账户预算。这样,运维团队就有一个可以负责的共享数字;某个项目的低效扫描,不应变成同一账户下另一个项目毫无征兆的宕机。

排查高成本读取的后端工程师

要找的是查询模式,而不是随意删除数据。D1 会在每次查询的 meta 对象中返回 rows_readrows_written,这些数值能够显示单次执行的精确用量。

Cloudflare 还通过 Wrangler 和 GraphQL Analytics API 提供查询洞察。按读取量排序,找出反复出现的扫描,检查执行计划,添加针对性索引,然后再次测量。一次改动既能减少额度消耗,通常也能降低延迟。

负责导入或同步任务的运维负责人

一次批量同步可能在客户流量接触数据库之前,就耗尽 100,000 行写入额度。非紧急任务可以跨多个重置窗口分批执行;生产环境导入前,也可以把账户升级到 Paid。

不要指望触及写入上限后再做清理。DELETE 本身也是写入操作,同一份已经耗尽的额度会让清理查询同样被阻止,直至重置。这样安排的价值,是在批处理运行期间继续为线上业务保留写入能力。

在警报到来前,先给 Cloudflare D1 免费额度设预算

下面是一套可执行的初始策略。它是运维规则,并非 Cloudflare 的要求:把生产预算设为官方 Free 配额的 80%。也就是说,每天的运营上限是读取 400 万行、写入 80,000 行,另外保留 100 万行读取和 20,000 行写入,用于应对突发流量和监测延迟。

  1. 测出真实的一天

    打开 Cloudflare,进入 D1,逐一选择数据库并打开 Metrics。默认视图显示最近 24 小时。调取足够长的历史数据,覆盖普通工作日、产品发布、数据导入和流量高峰。D1 会保留 31 天的这些指标。

  2. 找出消耗行数的查询

    测试关键路径时,查看每条查询的 meta.rows_readmeta.rows_written。利用查询洞察,对高频或高成本语句排序。对读取开销最大的查询运行 EXPLAIN QUERY PLAN,先修复全表扫描,再判断升级套餐是否是唯一答案。

  3. 在硬上限之前预警

    使用 GraphQL Analytics API 定时检查账户;它读取的正是控制台所用的数据集。读取达到 400 万行或写入达到 80,000 行时通知负责人。Cloudflare 在额度用尽时发送的邮件,仍可用来确认事故,但不应成为生产环境的第一个信号。

  4. 提前写好失败处理方案

    现在就决定 D1 抛出额度错误时 Worker 应返回什么。如果缓存读取不会再次执行 D1 查询,它仍可能可用;写入路径则需要明确返回不可用状态,或使用单独设计的队列。不要对额度错误循环重试,因为它要到 UTC 零点或完成升级后才能恢复。

D1 每日读写预算达到 80% 预警线、硬停止和 UTC 零点重置,并展示 Paid 路径的架构示意图
应把 D1 Free 配额当作可用性预算,而不是账单估算

D1 指标文档rowsReadrowsWritten 列为 GraphQL 字段,并确认控制台使用相同的分析数据。小团队由此既有今天就能执行的手动路径,也有数据库重要到需要通知值班人员时可自动化的路径。

这些解决方案也有明确边界

索引并非没有成本。它会占用存储空间,并在索引值变化时增加写入。只添加能够消除高成本扫描的索引,然后重新测量读写之间的平衡。如果账户已经接近 100,000 行的写入上限,不加选择地建立索引反而可能得不偿失。

Paid 也并非无限使用。它每月包含 250 亿行读取和 5,000 万行写入,超出后按公开价格计费。升级通常会在几分钟内解除 Free 的每日停用,但仍需监控低效查询,并预测 Workers 账单的其他部分。Cloudflare 的当前 D1 定价页是运行手册中应长期保留的数据表。

这里还有一处值得了解的版本记录差异。2025 年 1 月的一则 D1 发布说明称,限制会从 2025 年 2 月 10 日开始执行;较新的专项更新日志则称,执行时间是 2026 年 9 月 1 日。本文以较新的页面为准,因为它直接说明了当前这次上线。这也解释了为何旧的搜索结果可能显示另一个日期。

最后,“存储的数据不受影响”不等于“产品运行正常”。数据可以安然无恙,但所有需要访问它的路由仍可能返回错误;对业务而言,真正的后果是可用性下降。

周一该怎么做

如果面向客户的应用运行在 Workers Free 上,而且请求链路会访问 D1,就应在本周行动。先测量,再修复明显的扫描,把读取 400 万行和写入 80,000 行设为预警线,并预先授权每个账户每月最低 $5 的 Paid 升级。

如果只是可随时丢弃的原型,31 天的历史用量始终远低于运维预算,而且一天无法查询也不会影响客户或收入,可以暂缓升级。不过,预警仍应保留,因为流量和表规模都会改变读取量。

如果账户已经使用 Workers Paid,或应用根本不查询 D1,则不受这项每日停用规则影响。

周一要做的事情很简单:打开每个数据库的 D1 Metrics 标签页,记下账户单日最高的读取量和写入量,找出扫描行数最多的查询,并明确授权一位负责人执行升级。如果修复查询后,正常峰值仍超过读取 400 万行或写入 80,000 行,当天就把账户迁移到 Workers Paid。

如果希望把下一次平台变化也转化为可执行的运维决策,欢迎订阅邮件通讯

最近更新

2026年9月2日

分类Explained

在 Google 中优先显示本站

将 omidsaffari.com 添加为 Google 搜索的优先来源

把 omidsaffari.com 设为优先来源,Google 会在 Top Stories、AI Overviews 和 AI Mode 中为您优先展示。

更多 Explained 文章

查看全部 Explained 文章
订阅通讯

每周日,一封信。 写运转中的系统,不写热评。

来自一组 AI 项目组合运营的构建日志、生产系统与一线笔记。

每周一期。无垃圾邮件。随时退订。