これはCloudflare上でAI関連プロダクトを運用する記録シリーズの1本である。自社プロダクト「カンタン補助金」は2026年9月にインフラをCloudflareへ全面移行した(Worker・Pages・D1・R2・Workflowsの構成)。移行後にD1データベースの利用料が想定を超えて発生した経緯と、索引の追加だけで請求が0円に戻った記録をまとめる。
この記事で分かること
- D1の請求がどのような形で発生したか
- 索引を2本追加しただけで請求が0円になった理由
- D1の課金の仕組みを公式ドキュメントでどう裏付けたか
この記事で分からないこと(正直に書く)
- 月45ドルの内訳(どのクエリが何回呼ばれて積み上がったか)の詳細
- 他のテーブルに同様の未索引クエリが残っていないかの全数調査結果
全面移行でD1に載せた
2026年9月、カンタン補助金はそれまでのサーバー構成からCloudflareのWorker・Pages・D1・R2・Workflowsへ全面移行した(出所: 自社の運用記録、確認日2026-09-06)。データベースが置き換わり、検索・一覧表示のクエリもD1に対して発行する形になった。
月45ドルの請求として現れた
移行後、D1の利用料として月45ドルの請求が発生した(出所: 自社の運用記録、確認日2026-09-06)。原因を辿ると、一覧表示に使っているクエリが索引の効かない条件で書かれており、1回の実行でテーブルを48,634行読み取っていた(出所: 自社の運用記録、確認日2026-09-06)。索引を持たない列で絞り込みをかけていたため、条件に合う行を探すのにテーブル全体を読み切る必要があった。
なぜ請求が出るまで気づけなかったか
D1はストレージ容量ではなく、クエリが読み取った行数(rows read)を主な課金指標にしている。Cloudflare公式ドキュメントによれば、D1はWorkers Paidプランで月間250億行のrows readが含まれ、それを超えた分が100万行あたり0.001ドルで課金され、索引を使うことで読み取る行数を減らせるとも明記されている(出所: Cloudflare公式ドキュメント「D1 Pricing」、https://developers.cloudflare.com/d1/platform/pricing/、確認日2026-09-06)。行数課金である以上、テーブルの容量が小さくても、索引の効かないクエリを繰り返し呼べば読み取り行数は積み上がる。請求には合計のrows readしか出ず、どのクエリが原因かはクエリ単位で洗い出さない限り分からなかった。
索引2本で48,634行を9行にした
原因のクエリが使っていた絞り込み条件に対して索引を2本追加したところ、同じクエリの走査行数は48,634行から9行まで減った(出所: 自社の運用記録、確認日2026-09-06)。読み取る行数がほぼ条件に一致する分だけになったため、月間の合計rows readは含まれる範囲に収まり、D1の費用は月45ドルから0円になった(出所: 自社の運用記録、確認日2026-09-06)。対応は2026年9月に完了している。
再発防止
修正後は、D1のクエリごとの走査行数を定点で見る運用に切り替えた。テーブルの行数が少ないうちは索引の欠如が遅延として表面化しにくく、費用として現れて初めて気づく形になりやすい。索引の有無をコードレビューの観点に加え、新しいクエリを足す際は走査行数を確認してから本番に載せることにしている。
索引による走査行数の最適化は、LLMを呼ぶWorkflowを本番で1回小さく起こす記事で扱った「小さく起こして確かめる」考え方とも通じる。Cloudflare上のコスト管理はR2の使用率を下げた記録も参照してほしい。ストレージ費用の全体像は姉妹記事「コストとストレージの記事」でまとめている。
自社プロダクトのCloudflare運用・コスト最適化について相談したい場合は、お問い合わせから編集部まで連絡してほしい。
よくある質問
Q1. D1の請求はなぜ発生したのか
索引が効かない条件で書かれたクエリが、1回の実行でテーブルを48,634行読み取っていた。D1は読み取った行数(rows read)を課金指標にしているため、このクエリが繰り返し呼ばれるほど請求が積み上がった。
Q2. なぜ請求が出るまで気づけなかったのか
D1の請求には合計のrows readしか出ず、どのクエリが原因かはクエリ単位で洗い出さないと分からなかった。テーブルの行数が少ないうちは体感できる遅延としても出にくい。
Q3. 何を直したのか
原因のクエリが使っていた絞り込み条件に索引を2本追加した。走査行数は48,634行から9行まで減り、月間の合計rows readが含まれる範囲に収まったことで、D1の費用は月45ドルから0円になった。
Q4. D1の課金はどのような仕組みか
Cloudflare公式ドキュメントによれば、D1はストレージ容量ではなく主にクエリが読み取った行数(rows read)を課金指標にしており、索引を使うことで読み取る行数を減らせるとされている。