Domanda

Ho un'applicazione web usando Flask SQLAlchemy con MySQL, e ho creato uno scopedsession (). Ho anche un gestore teardown_request che le chiamate session.remove () dopo ogni richiesta è finito. Per qualche strana ragione, se non richieste vengono effettuate sulla web app per un giorno o più, l'applicazione ottiene. "OperationalError: MySQL server è andato via"

Nella mia missione di debug, ho guardato SHOW PROCESSLIST e ho visto il seguente:

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

Il 174 è il numero di secondi la connessione dalla mia domanda è stata "Sleeping". Si continua a contare su se l'applicazione non fa un'altra richiesta.

Sembra che la mia applicazione aggrappa alla connessione a MySQL anche dopo la mia richiesta è finito! E di solito c'è un solo processo indipendentemente dal numero di richieste che faccio con la mia domanda, simultaneamente o no.

La mia domanda è se è normale per la connessione di essere "dormire" così a lungo? Sono abbastanza sicuro che il sonno prolungato sta causando MySQL di tagliare la connessione dopo un certo timeout che a sua volta causa il "OperationalError: Mysql è andato via" errore.

È stato utile?

Soluzione

il comportamento predefinito di SQLAlchemy è quello di raggruppare le connessioni all'interno del motore:

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

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

Per quanto riguarda la cosa disconnessione durante la notte, questo è un noto comportamento di MySQL, SQLAlchemy fornisce la bandiera pool_recycle al lavoro intorno ad esso. Qui ci sono molti link che lo descrivono:

http://www.sqlalchemy.org/docs/dialects/ mysql.html # connection-timeout

http://www.sqlalchemy.org/docs/ core / pooling.html # impostazione-piscina-riciclo

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

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

Blog post dal solo pochi giorni fa:

http://douglatornell.ca/blog/2012/01/08 / soggiorno-alive /

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top