数据库连接池种类及性能
现在很多Web服务器(Weblogic, WebSphere, Tomcat)都提供了DataSoruce的实现,即连接池的实现。通常我们把DataSource的实现,按其英⽂含义称之为数据源,数据源中都包含了数据库连接池的实现。
开源数据库连接池:
1 dbcp
dbcp可能是使⽤最多的开源连接池
这个连接池可以设置最⼤和最⼩连接,连接等待时间等,基本功能都有
优缺点:稳定性还是可以,不过速度稍慢,在⼤并发量的压⼒下稳定性有所下降,此外不提供连接池监控
2 c3p0
c3p0是另外⼀个开源的连接池,在业界也是⽐较有名的,这个连接池可以设置最⼤和最⼩连接,连接等待时间等,基本功能都有。
优缺点:连接池的持续运⾏的稳定性相当不错,在⼤并发量的压⼒下稳定性也有⼀定保证,此外不提供连接池监控。
3 proxool
proxool这个连接池可能⽤到的⼈⽐较少,但也有⼀定知名度,这个连接池可以设置最⼤和最⼩连接,连接等待时间等,基本功能都有。
优缺点:稳定性有⼀定问题,有⼀个需要长时间跑批的任务场景任务,优势--连接池监控
4.Druid
Druid是Java语⾔中最好的数据库连接池。Druid能够提供强⼤的监控和扩展功能。
商业中间件连接池
商业级别的中间件所⾃带的数据库连接池,他们的性能以及调配⽐开源好
1 weblogic的连接池
优缺点:在具此连接池的持续运⾏的稳定性很强,在⼤并发量的压⼒下性能也相当优秀,另外在⼀些
异常情况下连接池⾥的连接也能够及时释放。连接池监控⼀⽬了然,及时到位。
2 websphere的连接池
优缺点:此连接池的持续运⾏的稳定性相当强,在⼤并发量的压⼒下性能也⾜够优秀,另外在⼀些异常情况下连接池⾥的连接能够及时释放, 连接池监控配置有些复杂,但是配置好后各项指标⼀⽬了然并且有图形显⽰
关于最⼤链接数和最⼩连接数设置问题
1.为什么不⼤⼀点?
再分配多了效果也不⼤了,⼀个是应⽤服务器维持这个连接数需要内存⽀持,刚才说了32位的机器只能⽀持到1.5G,并且维护⼤量的连接进⾏分配使⽤对cpu也是⼀个不⼩的负荷,因此不宜太⼤。
druid连接池配置详解2 为什么不⼩⼀点?
回答:  如果太⼩,那么在上述规模项⽬的并发量以及数据量上来以后会造成排队现象,系统会变慢,数据库连接会经常打开和关闭,性能上有压⼒,⽤户体验也不好。
数据库连接池的配置:
<!-- 数据库连接池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">    <!-- 基本属性driverClassName url、user、password -->
<property name="driverClassName" value = "${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<!-- 配置初始化⼤⼩、最⼩、最⼤ -->
<property name="initialSize" value="${jdbc.initialSize}" />
<property name="minIdle" value="${jdbc.minIdle}" />
<property name="maxActive" value="${jdbc.maxActive}" />
<!-- 配置获取连接等待超时的时间 -->
<property name="maxWait" value="${jdbc.maxWait}" />
<!-- 配置间隔多久才进⾏⼀次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="${jdbc.timeBetweenEvictionRunsMillis}" />
<!-- 配置⼀个连接在池中最⼩⽣存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="${jdbc.minEvictableIdleTimeMillis}" />
<property name="validationQuery" value="${jdbc.validationQuery}" />
<property name="testWhileIdle" value="${stWhileIdle}" />
<property name="testOnBorrow" value="${stOnBorrow}" />
<property name="testOnReturn" value="${stOnReturn}" />
<!-- 打开PSCache,并且指定每个连接上PSCache的⼤⼩ -->
<property name="poolPreparedStatements" value="${jdbc.poolPreparedStatements}" />
<property name="maxPoolPreparedStatementPerConnectionSize"
value="${jdbc.maxPoolPreparedStatementPerConnectionSize}" />

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。