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 Free | Workers Paid |
|---|---|---|
| 每日读取 | 500 万行 | 250 亿行 |
| 每日写入 | 10 万行 | 5000 万行 |
| 总存储空间 | 5GB | 5GB |
| 免费额度超限 | 查询失败 | 按量计费 |
Workers Paid 超出包含额度后,将继续按照实际使用量计费。
其中数据库读取价格约为 每 100 万行 0.001 美元,写入约为 每 100 万行 1 美元,额外数据库存储约为 0.75 美元/GB/月。
对于个人博客、轻量 API、小型 SaaS 或实验项目来说,D1 Free 的额度仍然具有较高可用性。但如果已经将 D1 用于生产业务,就需要重点检查查询索引、缓存策略以及异常流量防护,避免某个高频 SQL 或爬虫在短时间内耗尽当天额度。