Странно, что мое соединение SQLAlchemy MySQL всегда заканчивается сном? - PullRequest
16 голосов
/ 11 января 2012

У меня есть веб-приложение Flask, использующее SQLAlchemy с MySQL, и я настроил scopedsession ().У меня также есть обработчик teardown_request, который вызывает session.remove () после завершения каждого запроса.По какой-то странной причине, если в течение одного или более дней веб-приложение не выполняет никаких запросов, приложение получает сообщение «Operationalerror: MySQL Server ушёл».

В своей миссии по отладке я посмотрел SHOW PROCESSLIST иувидел следующее:

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

174 - это количество секунд, в течение которых соединение из моего приложения «спало».Он продолжает считать, если приложение не выполняет другой запрос.

Похоже, что мое приложение сохраняет соединение с MySQL даже после того, как мой запрос завершен!И обычно есть только один процесс, независимо от того, сколько запросов я делаю с моим приложением, одновременно или нет.

Мой вопрос: нормально ли, что соединение так долго "спит"?Я почти уверен, что длительный спящий режим приводит к тому, что MySQL обрывает соединение по истечении определенного времени ожидания, что, в свою очередь, вызывает ошибку «OperationalError: Mysql уходил».

1 Ответ

24 голосов
/ 11 января 2012

Поведение SQLAlchemy по умолчанию состоит в том, чтобы объединять соединения в Engine:

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

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

Что касается отключения ночью, это известное поведение MySQL, SQLAlchemy предоставляет флаг pool_recycle для его обхода. Вот много ссылок, которые описывают это:

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

http://www.sqlalchemy.org/docs/core/pooling.html#setting-pool-recycle

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

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

Сообщение в блоге всего несколько дней назад:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...