数据库连接池

负责分配、管理和释放数据库连接

Posted by 果然 on June 14, 2022

什么是数据库连接池

数据库连接池负责分配、管理和释放数据库连接,允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起数据库连接遗漏。

为什么使用数据库连接池

  • 资源复用
    数据库连接复用,避免了频繁的创建、释放连接带来的性能开销,减少内存碎片。
  • 更快的系统响应速度
    数据库连接池初始化时,已经创建多个数据库连接置于池中备用。此时连接的初始化工作已经完成。对于业务请求而言,直接利用连接池中的可用连接,避免了数据库连接的创建和释放,从而缩减了系统整体响应时间。
  • 统一的连接管理,避免数据库连接泄露
    数据库连接由连接池统一管理,最后由连接池统一对连接进行析构,防止有连接没有析构,导致资源泄露。
  • 避免多个线程同时使用一个连接
    数据库连接并不是线程安全的。

数据库连接池有什么用

首先,数据库的连接池是一种池化技术,而池化技术的核心思想是实现资源的复用,避免资源重复创建和销毁的开销,而在数据库的应用场景里面,应用程序每一次向数据库发起CRUD操作时,都需要去创建连接,而在数据库访问量比较大的情况下,频繁的创建连接会带来较大的性能开销,而数据库连接池的核心思想就是,应用程序启动的时候,会提前初始化一部分的连接保存到连接池里面,当应用需要用到连接去进行数据操作的时候,直接从连接池里面取出一个已经建立好的连接,进行操作就可以了。
连接池的设计避免了每次连接的建立和释放所带来的开销。

数据库连接池有哪些关键参数

  • 初始化连接数
    表示启动的时候,需要去初始化多少个连接保存到连接池里面
  • 最大连接数
    表示同时最多能支持多少连接,若连接数不够,那么后续要获得连接的线程就会阻塞
  • 最大空闲连接数
    表示没有请求的时候,连接池里面要保留的最大空闲连接。
  • 最小空闲连接
    连接数小于这个值的时候,那么当连接数小于这个值的时候,那么连接池里面,需要再创建新的连接来补充这样一个数值。

在使用连接的时候的一些关键参数有:

  • 最大等待时间
    就是连接池里面的链接用完了以后,新的请求要等待的时间,超过这个时间就会提示超时异常。
  • 无效连接的清除
    清理掉连接池里面的无效连接,避免使用这个无效连接做操作的时候去导致出现一些错误。
    不同的连接池框架,除了上述核心参数以外,还会有很多业务型的参数。

传统的连接机制与数据库连接池的运行机制区别

数据库连接池的工作原理

  • 连接池的建立
  • 连接池中连接的使用管理 当客户请求数据库连接时,若池中有空闲连接可用,返回该连接;若没有空闲连接,则查看当前所开连接数是否已达到最大连接数,若没有达到就重新创建一个连接给请求的客户;若达到就按设定的最大等待时长进行等待,如果超出最大等待时长,则抛出异常给用户;
    当客户释放数据库连接时,先判断该连接的引用次数是否超过了规定值,若超过从连接池中删除该连接,否则保留给其他客户服务。
  • 连接池的关闭

连接池连接数量设置

一般经验公式,若CPU核数为N,
-1. 对于计算密集型,连接数和线程数设置为 N+1; -2. 对于 io 密集型,设置为2N +1 ;
-3. 对于计算 +io密集型,可算一下计算时间占总的任务时间的比例,最后算出单个CPU的饱和线程数量,用这个来设置线程数和连接数。
上面的仅仅是经验公式,最终还需要和具体业务结合在一起,经过大量测试,设置适合的参数。

mybatis 连接池 POOLED

// 配置数据源(连接池)信息
<datasource type="POOLED">
	< property name = "driver" value = "${jdbc.driver}" />
	< property name = "url" value = "${jdbc.url}" />
	< property name = "username" value = "${jdbc.username}" />
	< property name = "password" value = "${jdbc.password}" />
</datasource>

Druid简介

druid 数据源监控

jiankong