gpt4 book ai didi

mysql - 为什么我的 sql 池连接突然关闭

转载 作者:行者123 更新时间:2023-11-30 21:24:55 24 4
gpt4 key购买 nike

我正在使用一个池在一个类中对我的数据库进行查询,而我在 16 个实例中运行这个类(每个实例限制为 100 个连接 - 我不知道这个高数字是否与错误)

在运行一段时间后,应用程序突然崩溃并出现错误“Pool Closed”虽然唯一的地方是在应用程序结束时使用 pool.end()。

最佳答案

这是一个罕见的 MySQL 服务器,可以处理接近 1600 个连接的任何事情。如果您拥有其中一台服务器,您就会知道:您为硬件支付了一笔不小的费用,而且您可能有一个数据库管理员团队在照管它。

这里有一点悖论:与生产 MySQL 服务器的更多连接通常会减慢速度。为什么?当许多连接向服务器提出相似的查询时,它们通常会相互竞争。

巨大的池还可以隐藏应用程序问题,例如非常慢的查询和池连接泄漏。

编辑 另一个应用程序问题,即您的问题,是在查询仍处于事件状态时重用连接。 MySQL 使用 Packets out of order 消息报告此情况。如果您有像这样的伪代码的嵌套查询设置

  for each item in SELECT some query
for each detail in SELECT some query WHERE something = (item value from outer query)

每个查询都需要自己的连接。如果您在第一个连接上放置一个新查询,而它仍在传送先前的结果,MySQL 会感到困惑并说Packets out of order

专业提示 将每个连接仅用于一个查询,然后将其.release() 到池中。

您突然关闭池可能是某种服务器故障的结果。 (你没有给我们很多细节,所以这只是一个猜测。)

尝试在每个实例上以最大池大小为 5 来运行您的应用程序。确保设置了 pool options适本地:waitForConnections 必须为真,并且您应该允许高(或 0)poolLimit

如果您有时间并且对复杂性有胃口,您可以编写一个 pool event handlers 的小嵌套。监控池请求在队列中停留的时间。如果结果太长,您可以将池的最大大小设置得大一点(例如,6 而不是 5)。

专业提示 在您的池中使用非常少量的连接进行调试。你会更快地找到你的错误。

关于mysql - 为什么我的 sql 池连接突然关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59611894/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com