У меня есть веб-приложение 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 ушла".