MySql - 客户端超时

MySql - client timed out

我正在使用 C3P0 (0.9.5.2) 连接池连接到 MySQL 数据库。我已将默认语句超时设置为 1 秒。我看到在高负载期间,一些连接请求超时(checkoutTimeout 为 1 秒),但未达到最大池容量。在分析线程堆栈时,我看到 'MySQL Cancellation timer' 个线程处于可运行状态。可能存在批量超时,导致数据库无响应并且在 1 秒内未创建新连接。

有没有办法最大限度地减少取消计时器的影响,并确保在未达到最大池容量时不会发生客户端超时?

即使池不是 maxPoolSize,如果设置了 checkoutTimeout,检出尝试也会超时,并且无法在超时内获取新连接。 checkoutTimeout 就是 - 超时 - 并且无论原因如何都会强制执行时间限制。

如果你想防止超时,你必须确保连接可以在分配的时间内可用。如果有什么原因导致数据库无法响应连接请求,最直接的解决方案显然是解决该问题。其他方法可能包括设置更大的 acquireIncrement(以便更有可能预取连接)或更大的 minPoolSize(相同)。

或者,您可以选择更长的超时(或根本不设置超时)。