数据库连接池的一些理解
数据库连接池的作用
对于复杂业务场景下的应用,会需要频繁访问数据库资源。在这种场景下,频繁的建立、关闭数据库连接会对系统的性能照成极大的影响。为了解决这个性能瓶颈,可以考虑实现对数据库资源–连接的复用。对于数据库这类共享资源,有一个经典的设计模式:资源池。将资源池的设计理念引入数据库连接管理层面,就得到了数据库连接池。数据库连接池的目的是为了提供一套高效的连接分配、使用策略,最终目标是实现连接的高效、安全的复用。其基本原理是在内部对象池中维护一定数量的数据库连接,并对外暴露数据库连接获取和返回方法。
数据库连接池的工作原理
首先要说明一个问题,频繁建立、关闭数据库连接为什么会消耗更多的系统资源。原因在于,数据库连接建立时,会经历TCP的三握四挥 ,还有数据库的认证,最后才是真正的sql执行过程。其中TCP连接和数据库认证是业务上不需要关心的,在此基础上,才可以考虑连接的复用。
数据库连接池的功能主要有三个部分:
- 连接池的建立;在系统初始化时,依照系统配置来创建连接池,并在池中建立几个连接对象,以便使用时获取。连接池中的连接不允许随意建立和关闭,避免系统开销。
- 连接的使用和管理;当客户请求数据库连接时,首先查看连接池中是否有空闲连接,如果存在空闲连接,则将连接分配给客户使用;如果没有空闲连接,则查看当前所开的连接数是否已经达到最大连接数,如果没达到就重新创建一个连接给请求的客户;如果达到就按设定的最大等待时间进行等待,如果超出最大等待时间,则抛出异常给客户。当客户释放数据库连接时,先判断该连接的引用次数是否超过了规定值,如果超过就从连接池中删除该连接,否则保留为其他客户服务。
- 连接池的关闭;当系统或者应用关闭时,关闭连接池,释放所有连接。
连接池主要参数
- 最小连接数:是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费;
- 最大连接数:是连接池能申请的最大连接数,如果数据库连接请求超过次数,后面的数据库连接请求将被加入到等待队列中,这会影响以后的数据库操作;
- 最大空闲时间;
- 获取连接超时时间;
- 超时重试连接次数。
使用连接池需要注意的问题
- 并发问题,使用synchronized关键字;
- 事务处理,采用单个连接使用独占事务的模式等策略;
- 连接池管理,如连接的分配与释放,配置与维护等;