Dalam aplikasi berskala tinggi, performa basis data sering kali menjadi penentu utama responsivitas sistem. Artikel ini membahas langkah konkret menganalisis query lambat pada PostgreSQL.
Membaca Output EXPLAIN ANALYZE
Jangan menebak bagian mana yang lambat. Gunakan EXPLAIN ANALYZE untuk melihat rencana eksekusi dan waktu riil tiap node operasi.
EXPLAIN (ANALYZE, BUFFERS)
SELECT id, action, created_at
FROM audit_logs
WHERE guild_id = '1234567890'
ORDER BY created_at DESC
LIMIT 20;
Perhatikan dua hal penting:
- Node Type: Jika muncul
Seq Scanpada tabel dengan ratusan ribu baris, kemungkinan besar indeks yang sesuai belum dibuat. - Execution Time vs Planning Time: Mengidentifikasi apakah kelambatan terjadi pada pembuatan query plan atau pembacaan disk.
Indexing Gabungan (Composite Index)
Untuk query yang memfilter satu kolom dan mengurutkan kolom lainnya, indeks multi-kolom (composite index) memberikan lompatan performa signifikan:
-- Membuat composite index terarah
CREATE INDEX idx_audit_logs_guild_created
ON audit_logs (guild_id, created_at DESC);
Dengan indeks ini, PostgreSQL dapat langsung melompat ke subset guild_id tertentu dan mengambil 20 baris pertama tanpa perlu melakukan sort in-memory tambahan (Sort Method: quicksort).