python - 如何调查 SQLAlchemy QueuePool 限制溢出?

标签 python mysql flask sqlalchemy flask-sqlalchemy

我明白了

TimeoutError: QueuePool limit of size 5 overflow 10 reached, connection timed out, timeout 30

我已经看到问题了:

以及他们的回答。我尝试了它们并尝试在 very simplified codebase 中重现我的问题.我无法重现它。

我该怎么做才能找到/解决问题?

例如,我可以在 Python 中获取 QueuePool 的当前“使用情况”吗?

(另外,但可能更好的另一个问题是:为什么我不应该将队列溢出设置为 -1?)

到目前为止我没有尝试的是设置 app.config['SQLALCHEMY_POOL_RECYCLE'](设置 here )。我想我必须将它设置为较低的值才能解决此问题,但我可能会在其他地方超时,对吗?

最佳答案

  1. 针对您的 MySQL 数据库运行 show PROCESSLIST 以显示连接/池/使用情况。

    • 在 PyCharm 中,打开“数据库”边栏(通常在右侧),然后右键单击您的数据库/架构并选择“打开控制台”。粘贴上面的命令并单击绿色的“执行”按钮。
    • 我注意到,当我使用 API 时,每个 API 调用都会打开一个单独的连接,当它们达到 20 个连接时,下一个 API 调用会导致错误,即 TimeoutError: QueuePool达到大小 10 溢出 10 的限制 (10 + 10 = 20)。
    • 当我去掉 threaded=True 时,我只看到一个连接打开。
  2. 提交或存储所有现有更改,然后创建一个分支并开始剥离代码/逐个简化您的应用,看看问题是否仍然出现。

    • 在这种情况下我没有使用这种技术,但在处理像这样的其他严重难以追踪的错误时我已经成功地使用了它。
    • 既然您提到无法用一个简单的示例重现该问题,我认为值得推荐这种技术作为获得最小示例的一种方式。
  3. (结合 #2)尝试减少 SQLALCHEMY_POOL_SIZE Flask-SQLAlchemy 设置,以便更快地重现错误。

    • 这里的想法是让崩溃更快发生。
    • 在这种情况下我没有这样做。

关于python - 如何调查 SQLAlchemy QueuePool 限制溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47069114/

相关文章:

python - 如何在Python中从上到下循环遍历每条路径?

php - 返回某个时间段内每天创建、关闭和打开的记录数

python - 在 Flask 工厂设置中反射(reflect)不同的数据库

python - 使用 Flask 列出并提供 GridFS 中的文件

python - SQLalchemy 数据库列应该是什么模型来包含数据数组?

python - Prefetch_相关型号反向查找

python : Comma at the end of print statement

python - 导入错误 : cannot import name 'opentype' on new installation

php - 查找具有常见标签的 mysql 条目

java - DbUnit 无法清理插入 : foreign key constraint