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_statementsdanlog_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
WHEREdanORDER BY; urutan kolom penting. - Index composite untuk filter + sort bersamaan.
- Jangan terlalu banyak index: tiap index memperlambat penulisan dan memakan ruang.
- Pada PostgreSQL gunakan
CONCURRENTLYagar 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.