divya garg
divya garg

Reputation: 51

SQLAlchemy raises QueuePool limit of size 10 overflow 10 reached, connection timed out after some time

While using Flask-SQLAlchemy I get the error 'QueuePool limit of size 10 overflow 10 reached, connection timed out' consistently, after some time. I tried to increase connection pool size, but it only deferred the problem.

def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    config[config_name].init_app(app)
    initialize_db(app)

db = SQLAlchemy()

def initialize_db(app):
    db.init_app(app)

SQLALCHEMY_POOL_SIZE = 100

Upvotes: 3

Views: 4049

Answers (2)

Nathan Wailes
Nathan Wailes

Reputation: 12252

I just had this issue.


My situation

  • I have not yet launched my website, and so I am spending almost all of my time interacting with the local version, which is being run from PyCharm (i.e. on my computer), and so I only noticed the error on my local version of the site, and I didn't even try to see if it would also occur on the PythonAnywhere-hosted production version of the site.
  • I am using a MySQL database.
  • IIRC I first noticed the problem when I started running frequent (every 10 seconds) API calls from my front-end JavaScript.
  • I had debug=False in my app.run(), so it wasn't being caused by debug=True, which is something suggested elsewhere.

How I fixed it

The problem went away when I got rid of threaded=True in my app.run().

  • So, previously it looked like this:
    • app.run(debug=False, threaded=True)
  • and I changed it to look like this:
    • app.run(debug=False)

Upvotes: 0

divya garg
divya garg

Reputation: 51

I figured out the problem. The issue was sometimes database connection was going to lost state, which is causing pool size to be Exhausted after some interval.
To fix the issue I made the MySQL server configuration change for query timeout and made it 1 second.
After 1 second if the query didn't respond it will throw Exception and I added except block in code where that query was invoked(In my case it was GET query). In the Except block, I issued rollback command.

Upvotes: 2

Related Questions