Tutorial Database Traffic Control PlanetScale untuk Postgres
AW
Axel W

Dipublikasikan 2 Juli 2026

Tutorial Database Traffic Control PlanetScale untuk Postgres

Postgres punya celah fundamental dalam manajemen query traffic. Ketika spike query buruk atau workload runaway menyerang database, Postgres tidak punya mekanisme pertahanan yang baik. Ia menerima setiap query yang dilemparkan sampai performa menurun atau, dalam kasus terburuk, server crash. PlanetScale baru-baru ini meluncurkan Database Traffic Control, sebuah sistem manajemen traffic Postgres bawaan yang memungkinkan kamu menetapkan budget fleksibel pada database traffic.

Dengan Traffic Control, kamu bisa memutuskan secara real-time seberapa besar resource database yang boleh dikonsumsi oleh workload tertentu, dan Postgres akan menegakkan batas tersebut. Artikel ini adalah panduan praktis untuk mengimplementasikan fitur ini pada aplikasi production. Kita akan membahas mulai dari konsep dasar, pembuatan budget, tagging query, hingga integrasi otomatis via CLI.

Prasyarat dan Konsep Dasar Traffic Control

Traffic Control tersedia untuk semua database PlanetScale Postgres. Fitur ini memungkinkan pembuatan budget yang menargetkan subset query traffic. Budget bisa dibuat berdasarkan dimensi seperti query pattern, application name, Postgres user, atau custom tags melalui SQL comments. Setiap budget bisa diatur limit pada CPU percentage, CPU burst, backend process concurrency, dan per-query timing.

Sebelum mulai, pastikan kamu memiliki akun PlanetScale dan database Postgres yang sudah aktif. Jika belum, daftar di planetscale.com dan buat database baru. Fitur ini juga bisa diakses via PlanetScale API dan CLI, sehingga cocok untuk tim yang mengandalkan infrastructure-as-code.

Langkah 1: Aktifkan Traffic Control di Dashboard PlanetScale

Masuk ke PlanetScale Dashboard dan pilih database yang ingin dikonfigurasi. Buka tab Insights, lalu navigasi ke sub-tab Traffic Control. Jika ini pertama kali, kamu mungkin perlu merestart database agar fitur aktif sepenuhnya.

Di halaman Traffic Control, klik tombol Create Budget. Budget pertama biasanya ditujukan untuk query pattern yang paling sering muncul atau yang paling banyak memakan resource. PlanetScale Insights sudah melacak statistik setiap query, sehingga kamu bisa langsung mengidentifikasi query problematik tanpa perlu manual profiling.

Gunakan mode warn untuk budget pertama. Mode ini hanya mencatat query yang akan di-throttle tanpa benar-benar memblokirnya. Ini penting agar kamu bisa mengamati dampak sebelum beralih ke mode enforce.

Langkah 2: Buat Budget Berdasarkan Query Pattern

Pilih dimensi budget sesuai kebutuhan tim. Untuk incident response, pilihan paling umum adalah Query Pattern. Query pattern mengidentifikasi fingerprint query tertentu yang tercatat di Insights. Misalnya, ada satu endpoint reporting yang menjalankan SELECT * FROM large_table WHERE created_at > NOW() - INTERVAL '30 days' dan menyebabkan CPU spike setiap pagi.

Di form budget, pilih query pattern tersebut dari dropdown Insights. Beri nama budget yang deskriptif, misalnya reporting-heavy-select. Tambahkan deskripsi singkat agar engineer on-call tahu tujuan budget ini saat menerima alert.

Alternatif lain, gunakan Application Name jika kamu punya beberapa service yang terhubung ke satu database. Contoh: service analytics-worker bisa dibatasi agar tidak menghabiskan resource yang dibutuhkan oleh api-gateway.

Langkah 3: Atur Resource Limit pada Budget

Setelah menentukan target query, kini saatnya mengatur batas resource. PlanetScale menyediakan beberapa knob yang bisa dikonfigurasi:

  • CPU %: Batas penggunaan CPU total yang boleh dikonsumsi oleh budget ini.

  • CPU Burst Limit: Batas sementara untuk spike singkat agar query tidak langsung ditolak.

  • Backend Concurrency: Jumlah maksimum proses backend yang bisa berjalan secara paralel untuk query dalam budget ini.

  • Per-Query Timing: Batas waktu eksekusi per query sebelum diputus.

Untuk kasus reporting query yang berat, atur CPU % ke 20 dan backend concurrency ke 5. Kombinasi ini memastikan query reporting tetap berjalan, tetapi tidak mengganggu traffic utama aplikasi. Untuk query urgent seperti autentikasi, budget terpisah dengan CPU % 60 dan concurrency lebih tinggi bisa dibuat sebagai prioritas utama.

Langkah 4: Gunakan SQL Commenter untuk Tagging Traffic

Salah satu fitur paling powerful di Traffic Control adalah Custom Tags. Tags memungkinkan kategorisasi traffic berdasarkan metadata yang kamu lampirkan pada query melalui SQL comments. Ini sangat berguna untuk multi-tenant application atau isolasi traffic AI agent dari human user.

Install library sqlcommenter pada aplikasi kamu. Library ini tersedia untuk berbagai framework seperti Django, Rails, dan Spring Boot. Contoh implementasi pada Python dengan SQLAlchemy:

from google.cloud.sqlcommenter.sqlalchemy.executor import Executor

# Tambahkan tag pada setiap query
with Executor(engine) as executor:
    executor.execute(
        "SELECT * FROM orders WHERE status = 'pending'",
        comments={
            'priority': 'high',
            'service': 'payment-gateway',
            'customer_tier': 'enterprise'
        }
    )

Dengan tag tersebut, kamu bisa membuat budget berbasis priority=low dengan batas resource lebih ketat, sementara priority=high mendapat jatah lebih besar. Ini adalah cara paling granular untuk melakukan traffic shaping.

Langkah 5: Uji Budget di Warn Mode Sebelum Enforce

Jangan langsung beralih ke mode enforce tanpa observasi. Gunakan dashboard Insights untuk memantau query yang terkena throttle selama periode warn mode. Perhatikan metrik berikut:

  • Jumlah query yang masuk ke budget setiap menit.

  • Rata-rata CPU consumption oleh budget tersebut.

  • Latency p99 untuk query dalam dan luar budget.

Jika data menunjukkan query yang seharusnya tidak dibatasi ikut terkena dampak, revisi rule budget kamu. Mungkin query pattern terlalu luas atau tag yang digunakan salah. Setelah yakin bahwa hanya query yang dimaksud yang terkena batasan, ubah mode ke enforce dengan satu klik.

PlanetScale juga menyediakan demo tool onramp untuk simulasi. Clone repo tersebut dan jalankan onramp create untuk membuat schema dummy, budget, dan rule secara otomatis. Tool ini berguna untuk testing sebelum menyentuh production database.

Langkah 6: Integrasi dengan CLI dan API untuk Pipeline Automation

Traffic Control bukan hanya fitur dashboard. Tim DevOps bisa mengelola budget sebagai code melalui PlanetScale CLI dan API. Ini memungkinkan budget creation menjadi bagian dari deployment pipeline.

Contoh membuat budget via CLI:

pscale traffic-control budget create \
  --database my-db \
  --name "ai-agent-limit" \
  --mode warn \
  --cpu-percent 15 \
  --concurrency 3 \
  --tag ai_agent=true

Untuk integrasi Terraform, gunakan resource planetscale_traffic_control_budget (jika tersedia di provider versi terbaru). Dengan pola ini, setiap perubahan budget bisa di-review melalui pull request, bukan klik manual di dashboard.

Kesimpulan

PlanetScale Database Traffic Control memberikan Postgres kemampuan yang sebelumnya tidak dimiliki: kemampuan untuk membela diri dari query runaway. Dengan budget fleksibel berbasis query pattern, application name, dan custom tags, tim engineering bisa mengisolasi workload, melindungi user experience, dan merespons incident tanpa harus segera deploy hotfix.

Langkah selanjutnya: tambahkan sqlcommenter tags pada seluruh query di aplikasi kamu agar dimensi budget semakin kaya. Pelajari dokumentasi resmi Traffic Control di planetscale.com/docs/postgres/traffic-control dan baca deep dive teknis di behind-the-scenes blog post untuk memahami arsitektur internal fitur ini.

Gambar: PlanetScale Blog