MySql - 客户端超时

标签 mysql database c3p0 connection-timeout

我正在使用 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/

相关文章:

java - c3p0属性在配置文件中的哪里放置?

javascript - 在数据库中同时搜索多个表

php - 在查询中包含变量($ lecno)时,SQL查询出错

database - 存储在数据库中的图像在浏览器上显示时被剪切/裁剪

php - 获取 PHP 的 SQLite 查询结果

c# - 保持面向数据库的测试套件最新

hibernate - 强制 Spring/JPA/Hibernate/JDBC 重试失败的 beginTransaction?

php - 在提交注册表单时生成连续的 user_id

mysql - 从 MySQL 查询执行 .bat

java - JDBC连接池到同一台服务器上的多个MySQL数据库(使用相同的用户和密码)