Ringkasan: Temukan query paling lambat, baca rencana eksekusinya dengan EXPLAIN, tambahkan index yang tepat, dan hilangkan pola N+1. Banyak aplikasi menjadi berkali-kali lebih cepat hanya dari langkah ini.

Langkah 1: Temukan Query Lambat

  • PostgreSQL: ekstensi pg_stat_statements dan log_min_duration_statement.
  • MySQL: slow query log dan performance_schema.
  • Urutkan berdasarkan total waktu (frekuensi × durasi), bukan hanya yang paling lambat satuan.

Langkah 2: Baca Rencana Eksekusi

EXPLAIN (ANALYZE, BUFFERS)
SELECT * FROM orders WHERE customer_id = 42 ORDER BY created_at DESC LIMIT 20;

Perhatikan: Seq Scan pada tabel besar, perbedaan besar antara estimasi dan aktual, dan sort yang tumpah ke disk. EXPLAIN ANALYZE benar-benar menjalankan query, jadi hati-hati pada data produksi untuk perintah yang mengubah data.

Langkah 3: Index yang Tepat

CREATE INDEX CONCURRENTLY idx_orders_customer_created
  ON orders (customer_id, created_at DESC);

Prinsip:

  • Index mengikuti pola WHERE dan ORDER BY; urutan kolom penting.
  • Index composite untuk filter + sort bersamaan.
  • Jangan terlalu banyak index: tiap index memperlambat penulisan dan memakan ruang.
  • Pada PostgreSQL gunakan CONCURRENTLY agar tabel tidak terkunci.
  • Hapus index yang tidak pernah dipakai.

Kesalahan Umum

Masalah Solusi
SELECT * pada tabel lebar Pilih kolom yang dibutuhkan
N+1 query dari ORM Gunakan join/eager loading atau batch
Fungsi pada kolom di WHERE Index fungsional atau tulis ulang kondisi
OFFSET besar untuk paginasi Keyset pagination
LIKE '%kata%' Full-text search atau trigram index
Tipe data tidak cocok Samakan tipe agar index terpakai

Perawatan Rutin

  • Pastikan autovacuum dan statistik (ANALYZE) berjalan di PostgreSQL.
  • Pantau bloat tabel dan ukuran index.
  • Gunakan connection pooling (PgBouncer) bila koneksi banyak.
  • Arsipkan data lama atau gunakan partisi untuk tabel sangat besar.

Tuning Konfigurasi

Parameter seperti shared_buffers, work_mem, dan effective_cache_size perlu disesuaikan dengan RAM, tetapi setelah query dan index dibereskan. Ubah satu per satu dan ukur dampaknya.

Ukur Hasil

Bandingkan p95 latency endpoint, durasi query teratas, dan CPU/IO database sebelum dan sesudah. Lanjutkan ke optimasi API.

FAQ

Apakah menambah RAM server solusi?

Kadang membantu, tapi query buruk akan tetap buruk pada skala lebih besar. Perbaiki query dulu.

Apakah aman menambah index di produksi?

Aman bila memakai mode non-blocking dan dilakukan di jam sepi, setelah diuji di staging.

Langkah selanjutnya

Kirim 5 query terlambat Anda, kami analisis dan beri rekomendasi.