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
Post a Comment