我正在使用C3P0(0.9.5.2)连接池连接到MySQL DB。我已将默认语句超时设置为1秒。我看到在高负载期间,尽管未达到最大池容量,但某些连接请求超时(checkoutTimeout
为1秒)。在分析线程堆栈时,我看到“ MySQL Cancellation timer”线程处于可运行状态。可能存在大量超时,这导致数据库无响应,并且在1秒内未创建新连接。
是否有一种方法可以最大程度地减少取消计时器的影响,并确保在未达到最大池容量的情况下不会发生客户端超时?
答案 0 :(得分:1)
即使池不是maxPoolSize
,如果设置了checkoutTimeout
,结帐尝试也会超时,并且无法在超时时间内获取新的连接。 checkoutTimeout
就是这样-一个超时时间-并且无论原因如何,都将强制执行时间限制。
如果要防止超时,则必须确保可以在指定的时间内使连接可用。如果某种原因使数据库对连接请求无响应,则最直接的解决方案显然是解决该问题。其他方法可能包括设置更大的acquireIncrement
(以便更可能预取连接)或更大的minPoolSize
(相同)。
或者,您可以选择更长的超时时间(或完全不设置超时)。