为什么我的 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 options:waitForConnections
必须为真,并且您应该允许高(或 0)poolLimit
。
如果您有时间并且对复杂性有兴趣,您可以编写一个 pool event handlers 的小嵌套来监控池请求在队列中停留的时间。如果结果太长,您可以将池的最大大小设置得大一点(例如,6 个而不是 5 个)。
专业提示 使用池中的极少量连接进行调试。你会更快地找到你的错误。
我正在使用一个池在 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 options:waitForConnections
必须为真,并且您应该允许高(或 0)poolLimit
。
如果您有时间并且对复杂性有兴趣,您可以编写一个 pool event handlers 的小嵌套来监控池请求在队列中停留的时间。如果结果太长,您可以将池的最大大小设置得大一点(例如,6 个而不是 5 个)。
专业提示 使用池中的极少量连接进行调试。你会更快地找到你的错误。