Выпуск новостей завершён 15 сентября 2026. Материалы сохранены на дату публикации. Перейти к инструкциям →

Архив · Полный материал · Tproger

Cloudflare начала отключать D1 на бесплатном плане при превышении дневных лимитов: 5 млн чтений и 100 тысяч записей в сутки

С 1 сентября Cloudflare возвращает ошибки на запросы к D1 на плане Workers Free после превышения дневных лимитов: 5 млн прочитанных и 100 тысяч записанных строк. Что изменилось, как понять, что вы близко к лимиту, и как снизить чтения. — Читать дальше « Cloudflare начала отключать D1 на бесплатном…

Разработка · TprogerМарат Ильясов3 минуты
Перейти к тексту ↓
Cloudflare начала отключать D1 на бесплатном плане при превышении дневных лимитов: 5 млн чтений и 100 тысяч записей в сутки
Tproger
Коротко о главномРазвернутьСвернуть
  1. Cloudflare с 1 сентября начала жёстко применять дневные лимиты D1 , встроенной SQLite-базы для Workers, на бесплатном плане.
  2. Раньше превышение лимита строк проходило почти незаметно, теперь запросы через Workers Binding и REST API начинают возвращать ошибки и не работают до полуночи по UTC.
  3. Если у вас на Workers Free крутится пет-проект, бот или небольшой сервис с базой в D1, это касается напрямую: в один день трафик чуть выше обычного, и после обеда по Москве запросы к D1 начинают завершаться ошибкой до трёх часов ночи, а приложение без обработки этой ошибки показывает её пользователям.

Cloudflare с 1 сентября начала жёстко применять дневные лимиты D1 , встроенной SQLite-базы для Workers, на бесплатном плане. Раньше превышение лимита строк проходило почти незаметно, теперь запросы через Workers Binding и REST API начинают возвращать ошибки и не работают до полуночи по UTC. Данные при этом не удаляются.

Если у вас на Workers Free крутится пет-проект, бот или небольшой сервис с базой в D1, это касается напрямую: в один день трафик чуть выше обычного, и после обеда по Москве запросы к D1 начинают завершаться ошибкой до трёх часов ночи, а приложение без обработки этой ошибки показывает её пользователям. Cloudflare обещает письмо при достижении лимита, но письмо не починит прод.

Что изменилось на самом деле

Сами лимиты не новые, они давно указаны на странице тарифов. Изменился режим их применения: до 1 сентября Cloudflare не блокировала запросы при превышении, теперь блокирует. В тексте ошибки предлагается два выхода: перейти на платный план или подождать до завтра. Компания подчёркивает, что хранилище остаётся нетронутым, то есть речь только о временной недоступности, а не о потере данных.

Upgrade to a paid plan or wait until tomorrow. Cloudflare текст ошибки D1 при превышении лимита

Как считаются строки

Главная ловушка D1 — учёт по прочитанным строкам, а не по запросам. Запрос SELECT * FROM events WHERE user_id = ? без индекса по user_id заставляет движок пройти всю таблицу, и каждая пройденная строка засчитывается в лимит, даже если в ответе одна запись. Поэтому небольшой сервис с парой тысяч посетителей в день может упереться в 5 млн чтений на одном неудачном запросе в цикле.

-- посмотреть план запроса: если SCAN TABLE вместо SEARCH ... USING INDEX, чтения идут по всей таблице
EXPLAIN QUERY PLAN SELECT * FROM events WHERE user_id = 42;

-- индекс превращает полный проход в точечный поиск
CREATE INDEX IF NOT EXISTS idx_events_user ON events(user_id);

Сколько строк реально прочитал запрос, D1 возвращает в объекте meta ответа: поля rows_read и rows_written . Именно по ним, а не по числу вызовов, стоит оценивать, насколько вы близки к лимиту. Суммарную картину за день показывает GraphQL Analytics API и дашборд Cloudflare.

Что сделать до вечера

  • Откройте статистику D1 в дашборде за последние две недели: если пиковые дни выше 3–4 млн чтений, по нашей оценке вы в зоне риска (порог редакционный, Cloudflare его не задаёт).
  • Пройдитесь EXPLAIN QUERY PLAN по самым частым запросам и добавьте индексы там, где видите SCAN .
  • Кэшируйте горячие ответы в KV или Cache API: одно чтение из кэша вместо тысячи строк из базы.
  • Записи ограничены сильнее чтений (100 тысяч в сутки): считаются записанные строки, а не вызовы, так что батчи не помогут; пишите меньше строк, агрегируйте события и не кладите логи в D1 на каждый запрос.
  • Если проект уже коммерческий, Workers Paid за $5 в месяц снимает дневные лимиты и даёт 25 млрд чтений в месяц; дальше по $0,001 за миллион.
Для читателей из России. Региональных оговорок в документации Cloudflare нет, а оплатить Workers Paid российской картой не получится, так что для многих бесплатный план остаётся единственным. Это делает индексы и кэширование не оптимизацией, а условием работы сервиса.

Контекст

Для D1 «бесплатно» теперь читается буквально: в пределах квоты сервис работает, за пределами останавливается, а не копит счёт.

Источники: D1 free tier limit enforcement (Cloudflare Changelog) , D1 pricing

Изображение на обложке: иллюстрация сгенерирована ИИ для Tproger