TL;DR

PlanetScale vừa ra mắt Database Traffic Control cho Postgres (23/03/2026) — một traffic management system cho phép bạn đặt budget tài nguyên trên từng nhóm query và Postgres sẽ tự enforce. Một query rogue không còn đủ sức đánh sập cả database. Rule mới lan tới mọi replica trong 1-2 giây, hoạt động ngay cả khi server đang ở 100% CPU.

What's new

Postgres có một lỗ hổng cố hữu: nó nhận mọi query bạn gửi tới, không phân biệt query từ checkout của khách hàng VIP hay từ một background job đang chạy lệch. Khi traffic spike bất thường, performance degrade — tệ nhất là server đi luôn. statement_timeout chỉ kill sau khi query đã ngốn tài nguyên. Linux cgroups thì khởi chạy mọi task rồi mới starve.

Traffic Control đảo ngược câu chuyện: chặn query trước khi nó bắt đầu execute. Bạn định nghĩa "budget" — một slice tài nguyên — và gắn rule để cho biết query nào thuộc budget đó. Khi budget cạn, query bị warn (mode quan sát) hoặc block (mode enforce, trả về SQLSTATE 53000).

Why it matters

Sam Lambert (CEO PlanetScale) tóm gọn trong launch post: "Instead of total collapse, you define which workloads are allowed to be shed under pressure and which should have higher limits." Đây là khác biệt giữa graceful degradationsite-wide outage.

Trong incident response, bạn vào Insights, tìm fingerprint của query đang đốt CPU, click tạo budget — vài giây sau query đó bị throttle, database thở lại, team có thời gian fix gốc. Không còn cảnh phải SSH vào DB pkill một process đang chạy.

Technical facts

  • Backbone: built trên extension pginsights, hook vào ExecutorRunProcessUtility — thấy query trước khi nó chạy và sau khi xong.
  • Match dimensions: query pattern (fingerprint), application_name, Postgres user, IP/CIDR, custom tags qua sqlcommenter SQL comments (feature, priority, region, tier...).
  • Resource caps mỗi budget: server share (CPU %), burst capacity, per-query execution time, query concurrency.
  • Cơ chế leaky bucket ngược: mỗi query tích "debt" vào bucket. Bucket overflow ⇒ block. Debt drain theo thời gian. Size = burst limit, drain rate = long-term server share.
  • O(1) rule evaluation: rule set là lookup table <key,value> — chỉ ~3 lookups mỗi query, bất kể bạn config bao nhiêu rule.
  • Cost estimation: hash table per host, map mỗi query pattern → 2 exponential moving averages (CPU time thực + planner cost estimate). Hằng số k = ratio của 2 average — tự cập nhật khi workload thay đổi.
  • Rule propagation 1-2 giây: rule lưu JSON vào traffic_control.rules/traffic_control.budgets trong postgresql.conf, không cần restart, không cần SQL connection (nên hoạt động ngay khi DB đã 100% CPU).

Comparison

Cơ chếKhi nào chặnTài nguyên đốtGranularity
statement_timeoutSau khi vượt N giâyCao — query đã chạyPer-role / global
Linux cgroupsSau khi task startTrung bình — bị starvePer-process
pg_strictPre-executionThấpTheo query shape (allow/deny)
Traffic ControlPre-executionGần bằng 0Theo budget tài nguyên

Lưu ý: Traffic Control không phải WAF, không thay thế rate limit ở app layer, không phải cross-cluster limiter, và không thay cho indexing tốt. Nó là tầng phòng thủ cuối ngay trước Postgres executor.

Use cases

  • Incident response: rogue query đốt CPU → tìm fingerprint trong Insights → tạo budget → ổn định trong vài giây.
  • Priority shaping: tag query priority=high|medium|low. Auth + checkout có headroom, background jobs bị giới hạn.
  • Cô lập AI agent: agent workload (RAG queries, autonomous SQL) tách riêng budget — không drown out traffic của user thật.
  • Bảo vệ paid tiers: tag tier='free'|'pro'|'enterprise'. Free user chạy dashboard nặng → budget shed trước khi touch enterprise workload.
  • Safe deploy với feature flag: set env var DEPLOYMENT_TAG=new_checkout_v2 trên pod mới. Budget cho feature='new_checkout_v2' ở Warn mode từ ngày đầu — bạn thấy đúng blast radius trước khi nó thành incident, sau đó switch Enforce làm safety net.
  • Background workers: connection pool riêng với application_name='background-jobs', max 4 connection, budget conservative — job lệch cũng không crowd out user traffic.

Limitations & pricing

Có sẵn cho mọi PlanetScale Postgres database ngay hôm nay. PlanetScale Postgres plan từ $5/tháng. Hiện chưa hỗ trợ MySQL trong tài liệu launch.

App của bạn cần handle SQLSTATE 53000 tử tế: với non-critical workload (analytics, reporting) trả 503 + cached result; với critical path retry với backoff ngắn. Đây chính là controlled failure mode mà Traffic Control thiết kế tạo ra — bạn quyết định query nào fail thay vì để Postgres random hoá.

Budget là limit chứ không phải guarantee — không phân bổ tài nguyên cho query, chỉ giới hạn. Nếu DB underprovisioned thì rule không cứu nổi, bạn vẫn phải scale up.

What's next

Trong 1 tuần sau launch PlanetScale đã ship 2 update lớn:

  • 27/03/2026: command pscale traffic-control trên CLI — quản lý budget/rule như infra-as-code, đút thẳng vào pipeline deploy.
  • 30/03/2026: warning thresholds — Enforce budget có thể emit warning ở % của burst/per-query/concurrency trước khi thực sự block. Giúp bạn cảnh báo trước khi traffic chạm trần.

Roadmap xa hơn chưa được công bố, nhưng pattern shipping cadence (3 update lớn trong 7 ngày) cho thấy đây là feature đang được PlanetScale push mạnh.

Nguồn: PlanetScale blog, Behind the scenes deep-dive, Patterns for Postgres Traffic Control, Docs.