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

Flask e SQLAlchemy causano molto IDLE nelle connessioni di transazione in PostgreSQL

Ho visto che questa situazione si verifica quando esegui Flask in Modalità debug . Se il tuo codice genera un'eccezione e il debugger si avvia, la transazione non verrà mai "riportata indietro" o "rimossa". Di conseguenza, la sessione utilizzata nella richiesta non riuscita non viene mai restituita al pool.

La soluzione è disabilitare la modalità di debug.

MODIFICA:

C'è un'altra circostanza in cui l'ho visto accadere. Se disponi di codice che viene eseguito in modo autonomo (ovvero non fa parte di una transazione HTTP, come un thread indipendente avviato e generato all'avvio dell'app Flask), di solito comporterà una sospensione. Se accedi alla sessione prima del sonno, ti ritroverai con una transazione sospesa come questa durante il sonno.

Un'altra possibilità è che stai accedendo a una sessione dalla funzione di creazione dell'app. Se lo fai, assicurati di .remove(). Altrimenti, quella sessione potrebbe rimanere bloccata sul thread principale in un'app gevent.