我有一個使用SQLAlchemy和MySQL的Flask web應用程序,並且我設置了一個scopedsession()。我還有一個teardown_request處理程序,在每個請求完成後調用session.remove()。出於某種奇怪的原因,如果在一天或更長時間內沒有在Web應用程序上發出請求,該應用程序將獲得「Operationalerror:MySQL Server已消失」。奇怪的是,我的SQLAlchemy MySQL連接總是以睡眠結束?
在我的調試任務,我看了看SHOW PROCESSLIST看到以下內容:
39817253 | sqladmin | my_host | kb_dev | Sleep | 174 |
的174秒從我的申請已經「沉睡」的連接數。如果應用程序沒有發出另一個請求,它會繼續計數。
即使我的請求完成後,我的應用程序似乎仍然保持與MySQL的連接!無論我的應用程序同時或不同時處理多少請求,通常只有一個進程。
我的問題是,如果連接長時間「睡眠」是正常的?我很確定擴展休眠導致MySQL在某個超時後切斷連接,這反過來導致「OperationalError:Mysql已經消失」錯誤。
你解決了這個問題嗎?設置pool_recycle不適用於我。 – 2017-11-20 13:01:35