我正在使用 C3P0 (0.9.5.2) 连接池连接到 MySQL DB。我已将默认语句超时设置为 1 秒。我发现在高负载期间,尽管未达到最大池容量,但某些连接请求超时(checkoutTimeout
为 1 秒)。在分析线程堆栈时,我看到“MySQL 取消计时器”线程处于可运行状态。可能存在批量超时,导致数据库无响应并且未在 1 秒内创建新连接。
有没有办法最大限度地减少取消计时器的影响并确保在未达到最大池容量时不会发生客户端超时?
最佳答案
即使池不是 maxPoolSize
,如果设置了 checkoutTimeout
, checkout 尝试也会超时,并且在超时时间内无法获取新连接。 checkoutTimeout
就是一个超时,无论出于何种原因,都会强制执行时间限制。
如果您想防止超时,则必须确保连接可以在规定的时间内可用。如果某些原因导致数据库对连接请求无响应,最直接的解决方案显然是解决该问题。其他方法可能包括设置更大的 acquireIncrement
(以便更有可能预取连接)或更大的 minPoolSize
(相同)。
或者,您可以选择更长的超时(或根本不设置超时)。
关于MySql - 客户端超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53600835/