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