PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Flask et SQLAlchemy provoquent beaucoup d'IDLE dans les connexions de transaction dans PostgreSQL

J'ai vu cette situation se produire lorsque vous exécutez Flask en mode débogage . Si votre code lève une exception et que le débogueur démarre, la transaction ne sera jamais "annulée" ou "supprimée". Par conséquent, la session qui a été utilisée sur la demande qui a échoué n'est jamais renvoyée dans le pool.

La solution consiste à désactiver le mode débogage.

MODIFIER :

Il y a une autre circonstance où j'ai vu cela se produire. Si vous avez du code qui s'exécute de manière autonome (c'est-à-dire qui ne fait pas partie d'une transaction HTTP, comme un thread indépendant démarré et généré au lancement de l'application Flask), cela impliquera généralement une mise en veille. Si vous accédez à la session avant le sommeil, vous vous retrouverez avec une transaction bloquée comme celle-ci pendant le sommeil.

Une autre possibilité est que vous accédiez à une session à partir de la fonction de création d'application. Si vous le faites, assurez-vous de le supprimer (.remove()). Sinon, cette session pourrait rester bloquée sur le thread principal dans une application gevent.