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

Why do is my sql pool connection being closed suddenly

我正在使用一个池在 class 中对我的数据库进行查询,而我 运行 这个 class 在 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 optionswaitForConnections 必须为真,并且您应该允许高(或 0)poolLimit

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

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