Cloudflare D1 是面向 Workers 平台提供的 Serverless SQL 数据库,兼容 SQLite 的开发模式,开发者无需自行部署和维护数据库服务器,因此非常适合 Cloudflare Workers、Pages 等轻量级应用。

此次变化主要针对 D1 免费套餐达到每日额度后的处理方式

免费额度用完,D1 将直接停止查询

从 2026 年 9 月 1 日开始,Workers Free 用户达到当天的 D1 免费额度上限后,后续数据库请求将直接返回错误。

免费套餐目前每天提供:

  • 500 万行读取
  • 10 万行写入
  • 账户总存储空间 5GB
  • 单个 D1 数据库最大 500MB

需要特别注意的是,D1 计算的并不是简单的「SQL 查询次数」,而是数据库实际扫描、读取以及修改的行数。

例如,一个数据表拥有 5,000 条记录,如果执行一次没有索引优化的查询,需要扫描完整的数据表,即使最终只返回 3 条数据,也可能产生大约 5,000 行读取量

因此,500 万行读取看起来很多,但对于查询结构不合理、缺少索引或者访问量较大的应用来说,实际消耗速度可能比想象中快得多。

数据库索引变得更加重要

此次额度强制执行之后,D1 数据库的 SQL 查询优化也变得更加重要。

例如经常执行:

SELECT * FROM users WHERE email = 'user@example.com';

如果 email 字段没有建立索引,数据库可能需要扫描大量记录才能找到目标数据。

建立索引后:

CREATE INDEX idx_users_email ON users(email);

数据库能够显著减少扫描的数据行数量,从而降低 D1 的读取额度消耗。

不过索引并不是完全免费的。创建和维护索引同样会增加一定的数据库写入量,因此开发者仍然需要根据实际查询频率进行权衡。

超额不会扣费,但可能直接导致业务中断

新的额度策略实际上解决了免费 Serverless 服务比较令人担心的一个问题——意外产生高额账单

过去开发者使用按量计费的云服务时,如果网站突然遭遇大量访问、爬虫或者恶意请求,可能在短时间内产生大量数据库调用,最终出现远超预期的云服务账单。

D1 Free 现在采用了更加明确的硬限制机制:

额度没有用完 → 正常查询

额度耗尽 → 数据库请求失败

第二天额度刷新 → 自动恢复

这意味着,即使网站遭遇异常流量,也不会因为 D1 数据库读取量暴涨而自动产生额外费用。

但代价也非常明显:如果攻击者或者爬虫快速消耗掉当天的数据库额度,依赖 D1 的网站、API 和 Workers 应用可能直接出现服务异常。

国内用户每天早上 8 点恢复额度

D1 的每日额度按照 UTC 0:00 进行刷新。

换算成北京时间(UTC+8),也就是:

每天上午 8:00

因此,如果国内开发者在晚上耗尽了 D1 免费额度,并不是北京时间凌晨 0 点恢复,而是需要等到第二天上午 8 点。

对于生产环境来说,这个时间差尤其需要注意。

Workers Paid 的 D1 配额大幅提高

如果免费套餐已经无法满足业务需求,可以升级到 Workers Paid。

付费套餐的 D1 每日额度提高到:

项目Workers FreeWorkers Paid
每日读取500 万行250 亿行
每日写入10 万行5000 万行
总存储空间5GB5GB
免费额度超限查询失败按量计费

Workers Paid 超出包含额度后,将继续按照实际使用量计费。

其中数据库读取价格约为 每 100 万行 0.001 美元,写入约为 每 100 万行 1 美元,额外数据库存储约为 0.75 美元/GB/月

对于个人博客、轻量 API、小型 SaaS 或实验项目来说,D1 Free 的额度仍然具有较高可用性。但如果已经将 D1 用于生产业务,就需要重点检查查询索引、缓存策略以及异常流量防护,避免某个高频 SQL 或爬虫在短时间内耗尽当天额度。