繁体   English   中英

如何调查SQLAlchemy QueuePool限制溢出?

[英]How can I investigate SQLAlchemy QueuePool limit overflow?

我明白了

TimeoutError:达到大小为5的QueuePool限制溢出10,连接超时,超时30

我看过这些问题:

以及他们的答案。 我试过它们,我试图在一个非常简化的代码库中重现我的问题。 我无法重现它。

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

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

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

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

  1. 对MySQL数据库运行show PROCESSLIST以显示连接/池/用法。

    • 在PyCharm中,打开“数据库”侧栏(通常在右侧),然后右键单击数据库/模式并选择“打开控制台”。 粘贴上面的命令,然后单击绿色的“执行”按钮。
    • 我注意到的是,当我使用API​​时,每个API调用都会打开一个单独的连接,当它们达到20个连接时,下一个API调用会导致错误,这就是说TimeoutError: QueuePool limit of size 10 overflow 10 reached (10 + 10 = 20)。
    • 当我摆脱threaded=True ,我只看到一个连接打开。
  2. 提交或隐藏所有现有更改,然后创建一个分支并开始剥离代码/逐个简化您的应用程序,并查看问题是否仍然弹出。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM