开发者社区> 问答> 正文

在以下两个条件下1,需要设置testonborrow=false提升性能 2, 只设置testWhi

在以下两个条件下1,需要设置testonborrow=false提升性能 2, 只设置testWhileIdle=true,timeBetweenEvictionRunsMillis=9000ms 由于并发高连接池内连接一直是活跃的,这种配置下数据源一旦断开,失效的连接一直不能剔除。请问一下这种高并发的情况下,如何设置为让连接池知道数据库已经断开了,并且自动测试连接查询?

原提问者GitHub用户YuechaoYan

展开
收起
山海行 2023-07-05 19:27:39 152 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    在高并发环境下,对Druid数据源配置有以下几点建议:

    设置testOnBorrow为false来提升性能
    高并发 situation 下,应避免在 每次 borrow 连接时 测试连接,这会影响性能。

    设置testWhileIdle为true,并合理配置timeBetweenEvictionRunsMillis
    当连接空闲时,轮询测试连接的有效性。可以设置 timeBetweenEvictionRunsMillis为1分钟左右,找个适当的间隔。

    增加removeAbandoned属性
    设置合理的removeAbandonedTimeout来移除空闲但实际已失效的连接。

    合理配置maxIdle和maxActive
    根据实际情况配置一个足够多的空闲连接池和最大连接量,提供足够的可用连接。

    监控Druid监控指标
    监控active connections、idle connections、wait threads等指标,及时发现异常。

    综上:

    关闭testOnBorrow以提升性能
    开启testWhileIdle来在空闲时测试连接
    配置removeAbandoned来移除过期空闲连接
    合理配置连接池大小和最大连接量
    监控Druid状态指标来发现问题
    这5点可以让数据源在高并发情况下:

    提升性能
    知道已失效连接
    自动废弃失效连接
    提供足够可用连接
    通过监控发现异常

    2023-07-30 17:40:48
    赞同 展开评论 打赏
  • 设置testOnBorrow为true:这会在从连接池中获取连接时测试连接的可用性。当连接被归还到连接池时,连接池会自动测试连接的可用性。这样可以确保获取到的连接是有效的。

    2023-07-11 09:29:51
    赞同 展开评论 打赏
  • 后来通过配置keepAlive=true 另外配置minEvictableIdleTimeMillis=一个非常小的数值,从而来剔除连接池内的坏连接。

    原回答者GitHub用户YuechaoYan

    2023-07-06 10:55:28
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载