数据库连接池的组成

    xiaoxiao2024-11-28  73

     

    一、定义

            预先从数据库获取链接,保持可用的闲置状态,在应用需要使用时,通过连接池直接获取,减少与数据库交互的开销,使用完成后归还连接池管理,但不释放与数据库的物理链接。通过连接池的形式控制获取数据库链接的数量,设置最小连接数和最大连接数等参数,管控数据库链接的稳定性


        二、相关参数         (1)数据源/用户/密码         (2)最大连接数             连接池管理获取的连接数上限,一般所有实例的链接总数不可超过数据库设置的连接数上限80%         (3)最小连接数             连接池初始化时预先加载的数据库资源,连接池必须保持的最小链接数量。在高峰阶段后连接池的链接数量逐一释放到最小连接数,正常情况下满足平峰期间到业务请求         (4)最大使用次数             每个连接都有使用次数记录,达到一定次数后,释放链接         (5)最大使用时间             每个连接在池中的存活时间,到了过期时间后,如果链接空闲,则释放链接         (6)最小空闲数             指连接池管理上,必须保证空闲的连接数,保证请求来的时候立刻有可用的链接直接使用         (7)轮询检查时间间隔             指连接池检查链接群的情况的时间间隔


        三、运行逻辑         (1)初始化:根据相关参数进行初始化连接池,创建空闲链接队列,和所有链接队列,设置链接超时时间;创建最少链接放到空闲链接对垒和所有链接队列中;创建连接池的运行管理线程并启动;         (2)创建链接             涉及多线程同步处理,当前线程数使用AtomicInteger记录Count,通过jdbc建立物理链接,创建成功初始化链接的状态,使用次数,时间等属性,放入数据链接队列,放入空闲队列中         (3)获取链接             从空闲链接队列poll操作获得                 如果为空,判断是否池满,                     若满则使用带阻塞超时时间的poll操作进入阻塞等待,超时则记录次数,超过次数则告警                     若未满,则创建新链接             检查链接可用性,若不可用则断开链接,新建一个链接             设置链接的状态为使用中,记录使用次数加一,记录使用时间,


        四、成员变量          (1)空闲队列             使用BlockQueue作为存储,并发从队列中取链接或者放入链接时,如果队列满了支持堵塞等待,知道队列有空间可以继续存放。基于以上特性,获取链接时,相当于消费,创建链接时,相当于生产         (2)总链接队列             存放所有链接,当链接从空闲队列中取出使用后,总链接队列不会减少;链接使用后被释放,则从新放入空闲队列。         (3)当前连接数             使用AtomicInteger来存放链接个数,在创建链接或者释放物理资源时,可以进行并发处理,保证多线程安全


        五、运行管理线程         取空闲队列一个链接         链接不为空,检查是否达到调用次数或者过期时间,满足条件则断开链接,释放资源,从总链接队列中移除         检查空闲队列的条数是否满足最小空闲队列,不满足则在不超出最大连接数的条件下创建新链接         轮询总队列里的链接,检查使用状态的链接的使用时间,若使用时间超过限定,则告警长事务

    总体思维导图如下

    最新回复(0)