我明白了
TimeoutError: QueuePool limit of size 5 overflow 10 reached, connection timed out, timeout 30
我已经看到问题了:
- Sql Alchemy QueuePool limit overflow
- SQLAlchemy raises QueuePool limit of size 10 overflow 10 reached, connection timed out after some time
以及他们的回答。我尝试了它们并尝试在 very simplified codebase 中重现我的问题.我无法重现它。
我该怎么做才能找到/解决问题?
例如,我可以在 Python 中获取 QueuePool 的当前“使用情况”吗?
(另外,但可能更好的另一个问题是:为什么我不应该将队列溢出设置为 -1?)
到目前为止我没有尝试的是设置 app.config['SQLALCHEMY_POOL_RECYCLE']
(设置 here )。我想我必须将它设置为较低的值才能解决此问题,但我可能会在其他地方超时,对吗?
最佳答案
针对您的 MySQL 数据库运行
show PROCESSLIST
以显示连接/池/使用情况。- 在 PyCharm 中,打开“数据库”边栏(通常在右侧),然后右键单击您的数据库/架构并选择“打开控制台”。粘贴上面的命令并单击绿色的“执行”按钮。
- 我注意到,当我使用 API 时,每个 API 调用都会打开一个单独的连接,当它们达到 20 个连接时,下一个 API 调用会导致错误,即
TimeoutError: QueuePool达到大小 10 溢出 10 的限制
(10 + 10 = 20)。 - 当我去掉
threaded=True
时,我只看到一个连接打开。
提交或存储所有现有更改,然后创建一个分支并开始剥离代码/逐个简化您的应用,看看问题是否仍然出现。
- 在这种情况下我没有使用这种技术,但在处理像这样的其他严重难以追踪的错误时我已经成功地使用了它。
- 既然您提到无法用一个简单的示例重现该问题,我认为值得推荐这种技术作为获得最小示例的一种方式。
(结合 #2)尝试减少
SQLALCHEMY_POOL_SIZE
Flask-SQLAlchemy 设置,以便更快地重现错误。- 这里的想法是让崩溃更快发生。
- 在这种情况下我没有这样做。
关于python - 如何调查 SQLAlchemy QueuePool 限制溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47069114/