rupanya Anda tidak memutuskan sambungan. Menggunakan db.close_connection()
setelah kueri selesai akan membantu. Juga Jika saya melakukannya dengan benar CONN_MAX_AGE
untuk beberapa nilai pendek bisa membantu. Dan pertimbangkan untuk menggunakan beberapa session pooler, misalnya pgbouncer untuk koneksi Django. Dengan cara ini jika Anda memiliki terlalu banyak koneksi, itu akan menunggu (atau menggunakan kembali sebelumnya, tergantung pada konfigurasi) alih-alih membatalkan eksekusi dengan kesalahan...
perbarui :penjelasan kenapa saya usulkan
Jadi jika Anda memiliki lebih banyak utas maka postgres max_connections
, Anda mendapatkan kesalahan yang disebutkan. Setiap utas dapat menggunakan kembali koneksi jika CONN_MAX_AGE belum lulus. Pengaturan Anda adalah 0, jadi koneksi harus ditutup setelah kueri selesai, tetapi Anda melihat 100 koneksi menganggur. Jadi mereka tidak menutup. Jumlah koneksi yang besar berarti mereka juga tidak digunakan kembali (logika:jika Anda memiliki 100 kueri paralel, semuanya tidak akan menganggur, dan jika Anda memiliki begitu banyak, mereka tidak digunakan kembali - membuka yang baru). Jadi saya pikir Django tidak menutupnya seperti yang dijanjikan - jadi CONN_MAX_AGE disetel ke 0 tidak berfungsi dalam kode Anda. Jadi saya mengusulkan menggunakan db.close_connection()
memaksa pemutusan dan menyetel CONN_MAX_AGE ke beberapa nilai kecil dapat mengubah perilaku.