Question

J'ai une application web en utilisant Flask SQLAlchemy avec MySQL, et je l'ai mis en place un scopedsession (). J'ai aussi un gestionnaire teardown_request que les appels session.remove () après chaque demande est terminée. Pour une raison étrange, si aucune demande sont faites sur l'application Web pour une journée ou plus, l'application devient. « Operationalerror: serveur MySQL a disparu »

Dans ma mission de débogage, je regardais SHOW PROCESSLIST et vu ce qui suit:

39817253 | sqladmin | my_host | kb_dev   | Sleep   |  174 |

Le 174 est le nombre de secondes, la connexion de ma demande a été « en sommeil ». Il continue de comptage si l'application ne fait pas une autre demande.

Il semble que ma demande tient à la connexion à MySQL, même après ma demande est terminée! Et il n'y a généralement qu'un seul processus, peu importe combien de demandes que je fais ma demande, en même temps ou non.

Ma question est de savoir s'il est normal que la connexion soit « dormir » longtemps? Je suis assez sûr que le sommeil prolongé est à l'origine de MySQL pour couper la connexion après un certain délai d'attente qui à son tour est à l'origine du « OperationalError: Mysql a disparu » erreur.

Était-ce utile?

La solution

Le comportement par défaut de SQLAlchemy est de regrouper les connexions dans le moteur:

http://www.sqlalchemy.org/docs/core/engines.html

http://www.sqlalchemy.org/docs/core/pooling.html

En ce qui concerne la chose du jour au lendemain de déconnexion, c'est un comportement de MySQL connu, SQLAlchemy fournit le drapeau pool_recycle au travail autour d'elle. Voici de nombreux liens qui décrivent:

http://www.sqlalchemy.org/docs/dialects/ mysql.html # connexion délais d'attente

http://www.sqlalchemy.org/docs/ core / pooling.html # réglage-pool-recyclage

http://www.sqlalchemy.org/docs/core/ engines.html # sqlalchemy.create_engine (pool_recycle)

http://www.sqlalchemy.org/trac/wiki/FAQ#MySQLserverhasgoneaway

Blog post d'il y a quelques jours:

http://douglatornell.ca/blog/2012/01/08 / séjour-vie /

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top