blijkbaar verbreek je de verbinding niet. db.close_connection()
gebruiken nadat de query is voltooid, zou helpen. Ook als ik het goed heb CONN_MAX_AGE
een korte waarde zou kunnen helpen. En overweeg om een sessiepooler te gebruiken, bijv. pgbouncer voor django-verbindingen. Op deze manier, als je te veel verbindingen hebt, zal het wachten (of het vorige hergebruiken, afhankelijk van de configuratie) in plaats van de uitvoering af te breken met een fout...
bijwerken :uitleg waarom ik het voorstel
Dus als je meer threads hebt, postgres max_connections
, krijg je de genoemde fout. Elke thread kan de verbinding opnieuw gebruiken als CONN_MAX_AGE niet is geslaagd. Uw instelling is 0, dus de verbinding moet worden gesloten nadat de query is voltooid, maar u ziet 100 inactieve verbinding. Ze gaan dus niet dicht. Het grote aantal verbindingen betekent dat ze ook niet opnieuw worden gebruikt (logica:als je 100 parallelle queries zou hebben, zouden ze niet allemaal inactief zijn, en als je er zoveel hebt, worden ze niet hergebruikt - nieuwe openen). Dus ik denk dat django ze niet sluit zoals beloofd - dus CONN_MAX_AGE ingesteld op 0 werkt niet in je code. Dus ik stel voor om db.close_connection()
. te gebruiken om de verbinding te forceren en CONN_MAX_AGE in te stellen op een kleine waarde kan het gedrag veranderen.