sql >> Database >  >> RDS >> PostgreSQL

Flask en SQLAlchemy veroorzaken veel IDLE in transactieverbindingen in PostgreSQL

Ik heb deze situatie zien optreden wanneer u Flask uitvoert in Debug-modus . Als uw code een uitzondering genereert en de debugger begint, wordt de transactie nooit "teruggedraaid" of "verwijderd". Als gevolg hiervan wordt de sessie die werd gebruikt voor het mislukte verzoek nooit teruggestuurd naar de pool.

De oplossing is om de foutopsporingsmodus uit te schakelen.

BEWERKEN:

Er is nog een omstandigheid waarin ik dit heb zien gebeuren. Als je code hebt die autonoom wordt uitgevoerd (d.w.z. die geen deel uitmaakt van een HTTP-transactie - zoals een onafhankelijke thread die is gestart en voortgebracht bij het starten van de Flask-app), zal dit meestal een slaapstand inhouden. Als je de sessie opent voordat je gaat slapen, krijg je tijdens de slaap een vastgelopen transactie zoals deze.

Een andere mogelijkheid is dat u een sessie opent vanuit de functie app maken. Als je dit doet, zorg er dan voor dat je het .remove() doet. Anders zou die sessie in de hoofdthread in een gevent-app kunnen blijven hangen.



  1. Hoe twitter OAuth-gegevens op te slaan in de mysql-database?

  2. Postgres-databasefout:relatie bestaat niet

  3. Hoe terug te draaien wanneer er een fout optreedt tijdens het uitvoeren van de opdracht sql loader?

  4. Mysql Foreign Data Wrapper instellen in Postgresql