Bisakah terlalu banyak koneksi idle mempengaruhi kinerja PostgreSQL 9.2?

8

Beberapa pertanyaan pada server database saya sepertinya butuh waktu lama untuk merespon, dan saya percaya penggunaan CPU tinggi. Saat berjalan ps aux, saya melihat ~ 250 koneksi "idle" (yang saya yakini terlalu banyak). Saya belum mulai melakukan diagnosa lengkap, tetapi saya ingin tahu apakah ini tempat yang baik untuk mulai mencari.

Saya juga menggunakan PgBouncer dengan pooling tingkat transaksi. Saya mencurigai bahwa saya dapat dengan mudah mengurangi jumlah idlekoneksi dengan menyetel ukuran kolam. Namun, saya tidak ingin mulai melakukan terlalu banyak perubahan kecuali ada alasan bagus untuk melakukannya.

Bisakah banyak idlekoneksi di PostgreSQL 9.2 memengaruhi kinerja?

Terima kasih banyak!

Juan Carlos Coto
sumber
apa yang dimaksud dengan "terlalu banyak koneksi idle"? puluhan? ratusan?
jap1968
Pertanyaan yang diedit. Terima kasih telah menunjukkan ini. Hanya untuk memperjelas, hitungan terakhir adalah ~ 250
Juan Carlos Coto
Mungkin? Saya tahu Oracle DBA di sini telah meminta orang untuk mengatur alat dev mereka untuk menggunakan satu sesi untuk semua jendela (bukan sesi baru untuk setiap jendela) ketika database pengembangan mulai berjalan sangat lambat. Jumlah pasti yang dianggap sebagai "terlalu banyak" mungkin akan tergantung pada sumber daya yang tersedia untuk database Anda.
FrustratedWithFormsDesigner

Jawaban:

3

Saya benar-benar ragu koneksi menganggur adalah masalah Anda. PostgreSQL sangat mampu menangani sesi idle karena hampir tidak memerlukan sumber daya. Sesi aktif di sisi lain jauh lebih mungkin menjadi penyebab kelambatan.

Lihat https://wiki.postgresql.org/wiki/Number_Of_Database_Connections untuk referensi tentang jumlah koneksi basis data.

Max Vernon
sumber
Sesi iseng dengan transaksi tanpa komitmen sering kali merupakan penjahat nakal!
Philᵀᴹ
Saya setuju, Phil, walaupun itu sebenarnya bukan tentang PostgreSQL - ini lebih tentang bagaimana klien akhir ditulis (kecuali saya kehilangan sesuatu).
Max Vernon
Silakan lihat pertanyaan terkait tentang ini . Ini akan sangat membantu jika Anda mendukungnya. Terima kasih!
Juan Carlos Coto
Sebenarnya koneksi idle memang memiliki banyak (memori) overhead dan mereka harus dihindari (saya pikir itu mengalokasikan sekitar 10MB per koneksi sehingga dalam kasus Anda, Anda akan menghabiskan setidaknya 2,5GB memori)
Kedare
1
@ MaxVernon - di server postgresql 9.5 saya yang sedang berjalan, saya punya 25 proses idle, untuk kolom RES, ea. proses rata-rata sekitar 12MB (kisaran: 4,5MB - 584MB, saya curiga yang lebih besar tidak memiliki tx berkomitmen).
cerd