Странно ли, что мое соединение SQLAlchemy MySQL всегда заканчивается сном?

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

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

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

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

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

Мой вопрос в том, нормально ли это, что соединение "спит" так долго? Я почти уверен, что длительный сон заставляет MySQL разрывать соединение после определенного таймаута, что в свою очередь вызывает "OperationalError: Mysql has gone away".

16
задан trinth 11 January 2012 в 18:42
поделиться