billflare.

Moving a blog to EmDash on the D1 free tier: row reads ran out and the author rolled back twice

tozai (@ccietry_tozai) tried moving a WordPress blog with about 800 daily unique visitors and 7,000 page views to EmDash on Cloudflare, exceeded D1’s 5 million daily rows-read free limit, and went back to WordPress rather than move to a paid plan without a hard cap.

Products
D1Workers
Source
Author experienceCCIE TOZAI blog (ccie-go.com)
Author
tozai (@ccietry_tozai)

Key points

  • The author reports about 1.1 million D1 rows read (22% of the free limit) on a normal day before the migration. During migration work it reached 107–123% of the 5 million daily limit, and on October 14 it peaked at 10,167,276 rows (203%).
  • He rolled back twice. On October 13 he rolled back at 17:40 JST with 90% of the day’s limit used, because the next reset (09:00 JST) was more than 15 hours away; on October 14 he rolled back at 19:44 after actually exceeding it. On October 13 the 13:00 hour alone, which he marks as heavy bot traffic, read 1.67 million rows.
  • Mitigations he applied: edge cache lifetimes extended from 5 minutes to 1 hour to 1 day, caching for image delivery, precomputed reading times for post listings, unnecessary aggregation queries disabled, WAF rules for scanned paths such as .env, Bot Fight Mode and regional rate limiting. He writes that reads still did not fit and that he never fully pinned down the cause.
  • He warns that changing cache settings, redeploying or purging clears the cache, after which every request lands on the database at once; his measurements show 1,620,396, 3,581,449 and 1,133,884 rows read at 19:00, 19:15 and 19:30.
  • He did not switch to Workers Paid because, as he puts it, $5 is a minimum charge rather than a plan price, and the paid plan has alerts but no hard stop. His conclusion is not to migrate to the free tier with more than 500 daily unique visitors; he has paused the migration and says he would revisit it if Cloudflare’s planned hard spending cap ships.
  • Official docs (rechecked 2026-10-15): on Workers Free, D1 includes 5 million rows read and 100,000 rows written per day, reset at 00:00 UTC; once the account hits a daily limit, D1 queries return errors, and upgrading to Workers Paid removes the limits, typically within minutes. Workers Paid includes 25 billion rows read per month, then $0.001 per million. Budget alerts are informational and do not pause or cap usage.

Original sources

  1. Published

    Moving a blog to EmDash on the D1 free tier: row reads ran out and the author rolled back twice

    Open original source

    tozai (@ccietry_tozai) tried moving a WordPress blog with about 800 daily unique visitors and 7,000 page views to EmDash on Cloudflare, exceeded D1’s 5 million daily rows-read free limit, and went back to WordPress rather than move to a paid plan without a hard cap.

  2. The author’s 𝕏 article version: rolled back from EmDash after free-tier D1 exceeded the 5 million daily row-read limit (peak 10.1 million) on about 800 unique visitors and 7,000 page views, even with caching and bot mitigation; cache purges made it worse. He writes that the free tier fails safely and the paid plan, with alerts but no hard cap, does not.

    Read on 𝕏

    tozai

    @ccietry_tozai · Original 𝕏 post

    https://t.co/IuQQRAVw6o
    Read originalArchived

    tozai · @ccietry_tozai

    Why I Gave Up Migrating My Blog to Cloudflare

    A lot of people are saying you can migrate your blog to Cloudflare EmDash for free and that leaving WordPress is the smarter move. I’m deliberately sharing a caution based on real measurements. ⚠️ Rolled back from EmDash. Free-tier D1 exceeded the 5M daily row-read limit (peaked at 10.1M) on ~800 uniques / 7k PVs, even with caching and bot mitigation. Cache purges made it worse. Paid plan has no hard spending cap — alerts don’t stop charges. For a personal site, that risk is unacceptable. Uncapped usage means one bug or crawler spike can generate a multi-thousand-dollar bill while you’re asleep. Free tier fails safely. Paid does not. Details: https://ccie-go.com/cloudflare-emdash-migration-giveup-en/
Author experienceDurable Objects +3

Designing a poker game on Durable Objects so idle time costs nothing

Philip Atkinson describes the architecture of his multiplayer poker game on the Cloudflare Developer Platform and the cost rules he follows: archive finished games out of Durable Object storage, hibernate WebSockets, wake with alarms and treat logging as a cost decision.

Durable Objects

babynarc: a Durable Objects alarm loop and a surprise bill that grew from $300 to $500.

@babynarc says an alarm loop in an old Durable Object he thought was inactive left him badly burned: he watched a surprise $300 bill grow to $500 even after killing it. Replying to Cloudflare's Dane Knecht and Kenton Varda, he suggests prepending budget-alert details to every `cf` result by default.

Author experienceWorkers +10

How I keep Cloudflare under $5: where surprise bills come from

Ashish Sharma (@sarmaasis) runs several sites on the $5 Workers Paid plan and lists, product by product, the usage patterns he says quietly run up a Cloudflare bill, ending with a 12-item checklist.