Solusi Permasalahan Sorry Too Many Clients Already pada PostgreSQL
Masalah "batas koneksi tercapai" terjadi saat jumlah koneksi ke PostgreSQL melebihi nilai yang ditentukan oleh parameter max_connections. Artikel ini akan membahas penyebab, langkah pengecekan, dan solusi untuk memperbesar kapasitas koneksi.
Contoh Kasus
Saat aplikasi mencoba terhubung ke PostgreSQL, muncul pesan kesalahan seperti berikut:
FATAL: sorry, too many clients already
Pesan ini menunjukkan bahwa jumlah koneksi ke server telah mencapai batas maksimal (max_connections).
Penyebab Umum
- Parameter max_connections terlalu kecil: Nilai default PostgreSQL adalah 100 koneksi.
- Koneksi Tidak Dikelola dengan Baik: Koneksi tidak ditutup setelah digunakan.
- Tidak Menggunakan Connection Pooling: Semua koneksi dibuat langsung tanpa pooling.
- Lonjakan Beban Aplikasi: Aplikasi tiba-tiba meningkatkan jumlah permintaan koneksi.
Langkah-langkah Perbaikan
1. Periksa Nilai max_connections
Login ke PostgreSQL sebagai user admin:
sudo -u postgres psql
Lihat nilai max_connections saat ini:
SHOW max_connections;
Contoh output:
max_connections
----------------
100
2. Perbesar Nilai max_connections
Buka file konfigurasi PostgreSQL (postgresql.conf):
sudo nano /etc/postgresql/<version>/main/postgresql.conf
Cari parameter max_connections dan ubah nilainya:
max_connections = 200
Simpan file dan keluar.
Restart PostgreSQL untuk menerapkan perubahan:
sudo systemctl restart postgresql
Verifikasi perubahan:
SHOW max_connections;
3. Periksa dan Sesuaikan Shared Memory
Meningkatkan max_connections membutuhkan penyesuaian shared memory PostgreSQL.
Periksa nilai shared memory saat ini:
SHOW shared_buffers;
Sesuaikan parameter shared memory di postgresql.conf:
shared_buffers = 128MB
Jika max_connections ditingkatkan secara signifikan, Anda mungkin perlu mengubah pengaturan kernel shared memory:
Edit file /etc/sysctl.conf:
sudo nano /etc/sysctl.conf
Tambahkan atau ubah nilai berikut:
kernel.shmmax=268435456 # Adjust size as needed
kernel.shmall=2097152
Terapkan perubahan:
sudo sysctl -p
4. Gunakan Connection Pooling
Connection pooling memungkinkan penggunaan ulang koneksi untuk mengurangi beban server.
Instal PgBouncer, alat pooling populer:
sudo apt-get install pgbouncer
Konfigurasikan PgBouncer untuk aplikasi Anda:
Buka file konfigurasi PgBouncer (pgbouncer.ini):
sudo nano /etc/pgbouncer/pgbouncer.ini
Tambahkan atau ubah pengaturan berikut:
[databases]
mydb = host=127.0.0.1 port=5432 dbname=mydb
[pgbouncer]
listen_port = 6432
listen_addr = 0.0.0.0
pool_mode = session
max_client_conn = 1000
default_pool_size = 20
Restart PgBouncer:
sudo systemctl restart pgbouncer
Arahkan aplikasi untuk terhubung melalui PgBouncer (port 6432).
5. Periksa dan Tutup Koneksi Tidak Aktif
Periksa koneksi aktif:
SELECT * FROM pg_stat_activity;
Tutup koneksi idle atau tidak aktif:
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE state = 'idle' AND pid <> pg_backend_pid();
Tips Pencegahan
- Gunakan connection pooling untuk meningkatkan efisiensi.
- Pantau penggunaan koneksi secara berkala dengan query pg_stat_activity.
- Dokumentasikan pengaturan dan perubahan konfigurasi untuk memudahkan debugging.
- Skalakan server PostgreSQL jika beban aplikasi terus meningkat.
Pesan kesalahan "Batas Koneksi Tercapai" dapat diatasi dengan menyesuaikan max_connections, menggunakan connection pooling, dan memastikan manajemen koneksi yang baik. Dengan langkah-langkah di atas, dapat menjaga performa dan ketersediaan PostgreSQL untuk aplikasi, semoga bermanfaat mohon maaf jika ada informasi yang tidak sesuai.
Comments
Post a Comment