2012-01-11 32 views
16

Tôi có một ứng dụng web Flask sử dụng SQLAlchemy với MySQL, và tôi đã thiết lập một scopedsession(). Tôi cũng có một trình xử lý teardown_request gọi session.remove() sau khi mọi yêu cầu kết thúc. Đối với một số lý do lẻ, nếu không có yêu cầu được thực hiện trên các ứng dụng web cho một ngày hoặc nhiều hơn, các ứng dụng được "Operationalerror: MySQL Server đã biến mất".Thật kỳ quặc khi kết nối SQLAlchemy MySQL của tôi luôn kết thúc khi ngủ?

Trong sứ mệnh gỡ lỗi của tôi, tôi nhìn vào HIỂN THỊ processlist và thấy như sau:

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

Các 174 là số giây kết nối từ ứng dụng của tôi đã được "ngủ". Nó tiếp tục đếm ngược nếu ứng dụng không thực hiện một yêu cầu khác.

Dường như ứng dụng của tôi giữ kết nối với MySQL ngay cả sau khi yêu cầu của tôi kết thúc! Và thường chỉ có một quy trình cho dù tôi có yêu cầu bao nhiêu lần với ứng dụng của tôi, đồng thời hay không.

Câu hỏi của tôi là nếu kết nối được "ngủ" lâu thì bình thường? Tôi khá chắc chắn ngủ mở rộng là gây ra MySQL để cắt kết nối sau một thời gian chờ nhất định mà lần lượt gây ra lỗi "OperationalError: Mysql đã biến mất".

+0

Bạn đã giải quyết được sự cố chưa? Đặt pool_recycle không hoạt động đối với tôi. –

Trả lời

23

hành vi mặc định SQLAlchemy là để kết nối hồ bơi trong Động cơ:

http://www.sqlalchemy.org/docs/core/engines.html

http://www.sqlalchemy.org/docs/core/pooling.html

Theo như điều qua đêm ngắt kết nối, đây là một hành vi MySQL biết, SQLAlchemy cung cấp cờ pool_recycle để làm việc xung quanh nó. Dưới đây là nhiều liên kết trong đó mô tả nó:

http://www.sqlalchemy.org/docs/dialects/mysql.html#connection-timeouts

http://www.sqlalchemy.org/docs/core/pooling.html#setting-pool-recycle

http://www.sqlalchemy.org/docs/core/engines.html#sqlalchemy.create_engine (pool_recycle)

http://www.sqlalchemy.org/trac/wiki/FAQ#MySQLserverhasgoneaway

Blog bài từ chỉ một vài ngày trước:

http://douglatornell.ca/blog/2012/01/08/staying-alive/

+0

Cảm ơn zzzeek, ​​tất cả đều có ý nghĩa bây giờ. Tôi không có ý tưởng rằng kết nối tổng hợp được kích hoạt theo mặc định. Nhưng có vẻ như tôi sẽ thử tùy chọn pool_recycle ngay bây giờ. – trinth

+0

@trinth là bạn có thể giải quyết vấn đề của mình không? Tôi đang đối mặt với nhau. – giga

+0

@giga nó được một thời gian nhưng tôi tin rằng tùy chọn pool_recycle cố định nó cho tôi – trinth

Các vấn đề liên quan