您的位置:首页 > 数据库

数据库连接池

2016-07-26 17:04 309 查看
为什么会出现连接池?
在java中,对数据库的操作,都是基于jdbc的,jdbc每执行一次数据库操作,都需要先获取数据库连接,完成对数据库的操作之后,再关闭coonnection。

 



由于频繁的打开和关闭连接对jvm包括数据库都有一定的资源负荷,尤其应用压力较大时资源占用比较多容易产生性能问题。于是就有了连接池

什么是连接池?
 



 

先打开一定数量的数据库连接,当使用的时候分配给调用者,调用完毕后返回给连接池,注意返回给连接池后这些连接并不会关闭,而是

准备给下一个调用者进行分配。由此可以看出连接池节省了大量的数据库连接打开和关闭的动作,对系统性能提升的益处不言而喻。下面我们通过连接池几个属性的意义,来看连接池是如何提高系统性能的。

如何使用连接池
连接池现在有了很多产品,在这里我们以阿里的连接池为例说明

 



对几个属性进行说明:

maxIdle:连接池中最大的空闲的连接数,超过的空闲连接将被释放,如果设置为负数表示不限制;表示即使连接池中所有的数据库连接都处于空闲状态,也可以保持maxIdle数量的空闲连接

minIdle:连接池中最小的空闲的连接数,低于这个数量会被创建新的连接。

 

 



removeAbandonedTimeout
 :超过时间限制,回收没有用(废弃)的连接(默认为
300秒,调整为180)


removeAbandoned  :超过removeAbandonedTimeout时间后,是否进行没用连接(废弃)的回收(默认为false,调整为true)

 
以设定maxIdle为20,minIdle为10,removeAbandonedTimeout为30为例,

应用一旦启动则首先打开10个数据库连接,但注意此时正在使用的数据库连接为0,空闲的数据库连接数量为10。

你开始登录,假设登录代码使用了一个连接进行查询,那么此时正在使用的数据库连接池的数字为1、空闲数为9,不需要从数据库打开新的数据库连接。

当你登录结束后,正在使用的数据库的连接数量为0,空闲的数据库连接的数量为10。

 

当有11个人同时登录这个系统的时候,空闲的数据库连接不够,连接池从数据库新申请(打开)了一个连接,连同另外的10个一并送出,这个瞬间连接池的使用数是11个

11个人登录结束后,正在使用的数据库连接为0,连接池中空闲的连接数目在一定的时间内为11,因为minIdle<11<maxIdle。

 

当有21个人同时登录呢?那第21个人就只能等前面的某个人登录完毕后释放连接给他。

这时连接池开启了20个数据库连接,当在一定的时间内,没有任何人访问这个系统的时候,连接池中会一直有20个空闲连接吗?

当然不,连接池会在removeAbandonedTimeout设定的时间后关闭(maxIdle -minIdle)的连接还给数据库,在这个例子里数字是20-10=10,因为只需要保持最小空闲连接数就好。

 

maxWait :最大等待时间,当没有空闲连接时,应用等待连接池内被占用的数据库连接被释放的最大时间,超过该时间限制会抛出异常,如果设置-1表示无限等待(默认为无限,调整为60000ms,避免因线程池不够用,而导致请求被无限制挂起)

maxActive[b]:表示并发情况下最大可从连接池中获取的连接数。如果数据库不是单独,供一个应用使用,通过设置maxActive参数可以避免某个应用无限制的获取连接对其
他应用造成影响,如果一个数据库只是用来支持一个应用那么maxActive理论上可以设置成该数据库可以支撑的最大连接数。[/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库连接池