zoukankan      html  css  js  c++  java
  • 数据库连接池的最小连接为什么是Idle语义

    druid 的 minIdle -》 maxActive 和 hikariCP 的 minimumIdle -》 maximumPoolSize, 他们都是为了维护连接池内有足够的连接可用, 并且应对一定的流量突增; 这一点和线程池的 corePoolSize =》maxPoolSize 语义类似

    执行逻辑

    当前总连接数 = 池内连接数(空闲) + 活跃连接数

    在总连接不超过 max 的前提下,如果池内空闲连接数 < minIdle , 则会去创建连接

    线程池 ThreadPoolExecutor 里边的线程其实 worker角色, corePoolSize 这些线程是一直处于工作状态的,
    而db连接池只是连接资源的容器,归还到db连接池内的连接就是空闲的,所以是 minIdle

    一般建议 minimumIdle 和 maximumPoolSize 设置成一样大,因为db连接建立非常耗时;

    比如hikariCP就直接建议不单独设置 minimumIdle,默认和max一样大
    for maximum performance and responsiveness to spike demands, we recommend not setting this value and instead allowing HikariCP to act as a fixed size connection pool. Default: same as maximumPoolSize

    可以把 minIdle 概念换成 minSize最小连接数(空闲+活跃)吗?

    那么当前连接数小于 minSize 就直接判断需要创建新的连接; 当前连接数 == minSize后,如果再次申请连接,这个时候要去判断空闲状态的是否够用,不够用才去继续创建连接 直到 max; 从这个角度看是可以的

    空闲超时检测,minSize 内和 min ~ max之间的时长区别,逻辑上也是可以

    区别是,当较繁忙的时候 (active连接较多),minIdle 的判断逻辑会比minSize更早就去填充连接池 性能更优

    总之,代码逻辑要和语义匹配

    本文来自博客园,作者:mushishi,转载请注明原文链接:https://www.cnblogs.com/mushishi/p/14665218.html

  • 相关阅读:
    《Thinking In C#》
    在图片上写字
    在设计期跟踪代码
    VS2003下的重构工具ReSharp
    监视剪贴板的变化
    一次重构导向设计模式的实践
    JENA学习的零散笔记
    jena处理Owl
    Maven库中.lastUpdated文件自动清除工具
    WEB数据挖掘(六)——Aperture数据抽取(2)
  • 原文地址:https://www.cnblogs.com/mushishi/p/14665218.html
Copyright © 2011-2022 走看看