数据库连接池
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]
在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]
相关文章推荐
- .net数据库连接池配置技巧(默认值)
- 数据库连接池的配置
- java数据库连接池之bonecp
- 数据库连接池原理及作用浅谈
- C3P0 数据库连接池之一
- tomcat配置与数据库启动先后顺序
- 多线程编程(3):线程池ThreadPool
- 样式测试
- JTA事务处理--转自opening
- struts框架下ibatis配置文件
- [转载]我与TOMCAT不得不说的二三事
- 单例模式
- Python数据库连接池DBUtils
- Windows远程访问linux数据库
- jsp初始化数据库连接池
- Expresso使用说明
- Expresso持久层的深入使用研究
- 缓存在项目中的应用
- CAS配置相关
- 数据库连接池的使用(C3P0实现多数据源的数据库连接池)