2012-01-11 42 views
16

我有一個使用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已經消失」錯誤。

+0

你解決了這個問題嗎?設置pool_recycle不適用於我。 – 2017-11-20 13:01:35

回答

23
+0

謝謝zzzeek,現在一切都很有意義。我不知道默認情況下啓用了連接池。但看起來我現在正在嘗試pool_recycle選項。 – trinth 2012-01-11 19:17:52

+0

@trinth你能解決你的問題嗎?我面對同樣的情況。 – giga 2014-03-19 07:20:31

+0

@giga它已經有一段時間了,但我相信pool_recycle選項爲我解決了這個問題 – trinth 2014-03-19 17:37:13