数据库链接池

概念:sql

  最原始的数据库使用就是打开一个链接并进行使用,使用事后关闭链接释放资源。因为频繁的打开和关闭链接对jvm包括数据库
都有必定的资源负荷,尤为应用压力较大时资源占用比较多容易产生性能问题。由此使用链接池的做用就显现出来,他的原理其实不复杂:
先打开必定数量的数据库链接,当使用的时候分配给调用者,调用完毕后返回给链接池,注意返回给链接池后这些链接并不会关闭,而是
准备给下一个调用者进行分配。由此能够看出链接池节省了大量的数据库链接打开和关闭的动做,对系统性能提高的益处不言而喻。

  最小链接--应用启动后随即打开的链接数以及后续最小维持的链接数。
  最大链接数--应用可以使用的最多的链接数
  链接增加数--应用每次新打开的链接个数数据库

  举个例子说明链接池的运做:
假设设置了最小和最大的链接为10,20,那么应用一旦启动则首先打开10个数据库链接,但注意此时数据库链接池的正在使用数字为0--由于你并无使用这些链接,而空闲的数量则是10。而后你开始登陆,假设登陆代码使用了一个链接进行查询,那么此时数据库链接池的正在使用数字为一、空闲数为9,这并不须要从数据库打开链接--由于链接池已经准备好了10个给你留着呢。登陆结束了,当前链接池的链接数量是多少?固然是0,由于那个链接随着事务的结束已经返还给链接池了。而后同时有11我的在同一秒进行登陆,会发生什么:链接池从数据库新申请(打开)了一个链接,连同另外的10个一并送出,这个瞬间链接池的使用数是11个,不过不要紧正常状况下过一下子又会变成0。若是同时有21我的登陆呢?那第21我的就只能等前面的某我的登陆完毕后释放链接给他。这时链接池开启了20个数据库链接--虽然极可能正在使用数量的已经降为0,那么20个链接会一直保持吗?固然不,链接池会在必定时间内关闭必定量的链接还给数据库,在这个例子里数字druid是20-10=10,由于只须要保持最小链接数就行了,而这个时间周期也是链接池里配置的。jvm

  常见开源数据链接池:性能

1)DBCP优化

  DBCP是一个依赖Jakarta commons-pool对象池机制的数据库链接池.DBCP能够直接的在应用程序中使用,Tomcat的数据源使用的就是DBCP。ui

2)c3p0
  c3p0是一个开放源代码的JDBC链接池,它在lib目录中与Hibernate一块儿发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。
3)Druid
  阿里出品,淘宝和支付宝专用数据库链接池,但它不单单是一个数据库链接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个 SQL Parser。支持全部JDBC兼容的数据库,包括Oracle、MySql、Derby、Postgresql、SQL Server、H2等等。Druid针对Oracle和MySql作了特别优化,好比Oracle的PS Cache内存占用优化,MySql的ping检测优化。Druid提供了MySql、Oracle、Postgresql、SQL-92的SQL的完整支持,这是一个手写的高性能SQL Parser,支持Visitor模式,使得分析SQL的抽象语法树很方便。简单SQL语句用时10微秒之内,复杂SQL用时30微秒。经过Druid提供的SQL Parser能够在JDBC层拦截SQL作相应处理,好比说分库分表、审计等。Druid防护SQL注入攻击的WallFilter就是经过Druid的SQL Parser分析语义实现的。
相关文章
相关标签/搜索