Database4 min read11 views

Tips Optimalisasi Pada PostgreSQL

Optimasi PostgreSQL sebenarnya tidak selalu harus dimulai dari mengubah konfigurasi server. Sebagian besar masalah performa justru berasal dari query yang kurang efisien.

Tips Optimasi PostgreSQL yang Paling Efektif

Optimasi PostgreSQL sebenarnya tidak selalu harus dimulai dari mengubah konfigurasi server. Sebagian besar masalah performa justru berasal dari query yang kurang efisien. Berikut urutan yang paling disarankan.


1. Optimalkan Query Terlebih Dahulu

Ini adalah langkah yang paling penting.

  • Gunakan EXPLAIN atau EXPLAIN ANALYZE untuk melihat bagaimana PostgreSQL menjalankan query. Dari sini kita bisa mengetahui apakah query lambat karena membaca seluruh tabel atau karena index tidak digunakan.

  • Pastikan kolom yang sering digunakan pada WHERE, JOIN, ORDER BY, dan GROUP BY memiliki index.

  • Hindari membuat index terlalu banyak karena setiap kali ada proses INSERT, UPDATE, atau DELETE, semua index tersebut juga harus diperbarui sehingga proses penulisan data menjadi lebih lambat.

  • Perbaiki query yang tidak efisien, misalnya:

    • Hindari SELECT * jika hanya membutuhkan beberapa kolom.

    • Kurangi penggunaan subquery yang tidak perlu.

    • Jangan menggunakan fungsi pada kolom yang sudah di-index, karena sering kali membuat PostgreSQL tidak bisa memanfaatkan index.


2. Desain Tabel dan Struktur Data

Struktur database juga sangat berpengaruh terhadap performa.

  • Gunakan tipe data yang sesuai. Misalnya, gunakan INTEGER jika memang cukup, jangan menggunakan BIGINT tanpa alasan.

  • Lakukan normalisasi agar data tidak banyak duplikat.

  • Namun, jika aplikasi lebih sering membaca data daripada menulis data, beberapa bagian boleh dibuat lebih sederhana (denormalisasi) agar query menjadi lebih cepat.

  • Untuk tabel yang ukurannya sudah sangat besar (jutaan hingga miliaran data), gunakan Partitioning agar PostgreSQL hanya membaca bagian data yang diperlukan.


3. Lakukan Perawatan Database Secara Berkala

Database juga membutuhkan perawatan agar tetap optimal.

  • Jalankan VACUUM secara rutin untuk membersihkan ruang penyimpanan dari data yang sudah tidak digunakan.

  • Jalankan ANALYZE agar PostgreSQL selalu memiliki informasi terbaru mengenai isi tabel sehingga dapat memilih rencana query yang paling cepat.

  • Jika sering membuat index atau melakukan maintenance, tingkatkan nilai maintenance_work_mem apabila RAM server masih mencukupi.

  • Saat melakukan impor data dalam jumlah besar:

    • Gunakan COPY daripada ribuan INSERT.

    • Jika memungkinkan, nonaktifkan sementara index atau foreign key.

    • Setelah selesai, jalankan kembali ANALYZE.


4. Sesuaikan Konfigurasi PostgreSQL

Setelah query dan struktur database sudah baik, barulah melakukan tuning pada server.

Beberapa parameter yang penting antara lain:

  • shared_buffers → menentukan berapa banyak RAM yang digunakan PostgreSQL untuk menyimpan cache data.

  • work_mem → menentukan memori yang digunakan saat proses sorting dan join.

  • effective_cache_size → membantu PostgreSQL memperkirakan seberapa besar cache yang tersedia sehingga dapat memilih query plan yang lebih baik.

  • max_wal_size → jika terlalu kecil, checkpoint akan terlalu sering terjadi dan dapat memperlambat proses penulisan data.

  • Pastikan Autovacuum aktif dan konfigurasinya sesuai agar database selalu dibersihkan secara otomatis.


5. Optimalkan dari Sisi Aplikasi

Tidak semua masalah berasal dari PostgreSQL. Kadang aplikasi juga menjadi penyebab utama.

  • Gunakan PgBouncer atau connection pooling jika aplikasi membuat koneksi database dalam jumlah sangat banyak.

  • Hindari pola N+1 Query, yaitu ketika aplikasi menjalankan satu query utama lalu menjalankan ratusan query tambahan secara berulang.

  • Gabungkan beberapa query jika memungkinkan (batching).

  • Untuk data yang jarang berubah, gunakan cache seperti Redis agar aplikasi tidak selalu membaca data langsung dari PostgreSQL.


Urutan Optimasi yang Disarankan

Agar tidak membuang waktu, lakukan optimasi dengan urutan berikut:

  1. Cari query yang paling lambat menggunakan pg_stat_statements.

  2. Analisis query tersebut dengan EXPLAIN ANALYZE.

  3. Tambahkan atau perbaiki index yang diperlukan.

  4. Jalankan ANALYZE agar statistik database selalu terbaru.

  5. Lakukan tuning parameter PostgreSQL seperti shared_buffers, work_mem, dan autovacuum.

  6. Jika ukuran tabel sudah sangat besar, pertimbangkan menggunakan Partitioning atau memperbaiki desain database.


Prinsip Sederhana yang Perlu Diingat

Saat aplikasi terasa lambat, jangan langsung menaikkan spesifikasi server. Sebagian besar masalah performa PostgreSQL bisa diselesaikan dengan memperbaiki query dan struktur database.

Urutan yang paling aman adalah:

Optimalkan Query → Optimalkan Index → Optimalkan Struktur Tabel → Baru Optimalkan Konfigurasi Server / Aplikasi

Dengan mengikuti urutan tersebut, peningkatan performa biasanya akan jauh lebih terasa dibandingkan langsung melakukan tuning konfigurasi PostgreSQL tanpa mengetahui akar permasalahannya.