Solusi Koneksi Idle Menggantung di PostgreSQL

Ketika menggunakan PostgreSQL, koneksi yang tidak memiliki pengaturan keepalive dapat menyebabkan koneksi idle tetap menggantung. Hal ini dapat membebani server dengan koneksi yang tidak digunakan, menyebabkan konsumsi sumber daya yang tidak perlu, atau bahkan mencegah klien baru terhubung karena batas koneksi tercapai.


Artikel ini akan membahas cara mengatasi masalah tersebut dengan mengaktifkan pengaturan keepalive di PostgreSQL.

Apa Itu Keepalive di PostgreSQL?

Keepalive adalah mekanisme untuk memastikan bahwa koneksi antara klien dan server tetap aktif. Dengan mengaktifkan keepalive, server dapat mendeteksi jika koneksi tidak lagi aktif dan menutupnya untuk membebaskan sumber daya.

Langkah-Langkah Mengaktifkan Keepalive di PostgreSQL


Langkah 1: Identifikasi Masalah

Periksa Koneksi Idle Gunakan perintah berikut untuk memeriksa koneksi idle yang menggantung di PostgreSQL:

SELECT pid, state, query_start, state_change, client_addr 

FROM pg_stat_activity 

WHERE state = 'idle';


Periksa Jumlah Koneksi Hitung total koneksi aktif:

SELECT count(*) FROM pg_stat_activity;

Jika banyak koneksi dalam status idle untuk waktu yang lama, ini menunjukkan bahwa pengaturan keepalive tidak aktif.


Langkah 2: Konfigurasi Keepalive di PostgreSQL

1. Edit File Konfigurasi postgresql.conf

Cari dan ubah parameter berikut di file postgresql.conf (biasanya terletak di direktori data PostgreSQL):

# Durasi sebelum keepalive pertama dikirimkan

tcp_keepalives_idle = 300     # (detik, default 7200)

# Interval antar paket keepalive

tcp_keepalives_interval = 60 # (detik, default 75)

# Jumlah paket keepalive sebelum koneksi dianggap mati

tcp_keepalives_count = 5     # (default 9)


Contoh:

tcp_keepalives_idle = 300

tcp_keepalives_interval = 60

tcp_keepalives_count = 5


2. Restart PostgreSQL

Setelah mengedit file konfigurasi, restart PostgreSQL agar perubahan diterapkan. Gunakan perintah berikut:

sudo systemctl restart postgresql


Langkah 3: Konfigurasi Keepalive di Klien

Jika Anda menggunakan klien seperti psql atau driver database, pastikan klien mendukung keepalive. Contoh berikut menggunakan Python dan library psycopg2.


Contoh dengan psycopg2:

import psycopg2

import psycopg2.extras


# Konfigurasi koneksi dengan pengaturan keepalive

conn = psycopg2.connect(

    dbname="your_db",

    user="your_user",

    password="your_password",

    host="your_host",

    options="-c tcp_keepalives_idle=300 -c tcp_keepalives_interval=60 -c tcp_keepalives_count=5"

)


# Pastikan koneksi tetap digunakan

cursor = conn.cursor()

cursor.execute("SELECT 1;")

print(cursor.fetchone())


Langkah 4: Monitor Koneksi Setelah Konfigurasi

Setelah mengaktifkan keepalive, periksa kembali koneksi untuk memastikan koneksi idle yang menggantung telah dihapus.


Periksa Koneksi Aktif

SELECT pid, state, query_start, state_change, client_addr 

FROM pg_stat_activity;

Gunakan Log PostgreSQL Periksa log PostgreSQL untuk memastikan tidak ada koneksi idle menggantung:

tail -f /var/log/postgresql/postgresql.log


Dengan mengaktifkan pengaturan keepalive di PostgreSQL, Anda dapat mengelola koneksi idle dengan lebih efektif, memastikan server tetap optimal, dan mencegah penggunaan sumber daya yang tidak diperlukan. Pastikan untuk menguji perubahan konfigurasi di lingkungan pengembangan sebelum menerapkannya ke server produksi. Semoga bermanfaat dan mohon maaf jika ada kesalahan informasi yang disampaikan.

Comments

Popular posts from this blog

Integrating PHP with Message Queues RabbitMQ Kafka

FastAPI and UVLoop: The Perfect Pair for Asynchronous API Development

Konfigurasi dan Instalasi PostgreSQL Secara Lengkap di Windows Linux dan MacOS