PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Django ORM lascia connessioni inattive su Postgres DB

a quanto pare non ti disconnetti. Usando db.close_connection() al termine della query aiuterebbe. Inoltre, se ho capito bene CONN_MAX_AGE a un valore breve potrebbe aiutare. E considera l'utilizzo di alcuni pooler di sessioni, ad esempio pgbouncer per le connessioni django. In questo modo se hai troppe connessioni aspetterà (o riutilizzerà le precedenti, a seconda della configurazione) invece di interrompere l'esecuzione con errore...

aggiornamento :spiegazione del perché lo propongo

da documenti

Quindi, se hai più discussioni, postgres max_connections , viene menzionato l'errore. Ogni thread può riutilizzare la connessione se CONN_MAX_AGE non è passato. La tua impostazione è 0, quindi la connessione dovrebbe essere chiusa dopo il completamento della query, ma vedi 100 connessioni inattive. Quindi non stanno chiudendo. Il gran numero di connessioni significa che non vengono nemmeno riutilizzate (logica:se avessi 100 query parallele non sarebbero tutte inattive e se ne hai così tante non vengono riutilizzate - aprendo nuove). Quindi penso che django non li chiuda come promesso, quindi CONN_MAX_AGE impostato su 0 non funziona nel tuo codice. Quindi propongo di usare db.close_connection() forzare la disconnessione e impostare CONN_MAX_AGE su un valore piccolo può cambiare il comportamento.