阿里巴巴Druid数据库连接池
监控SQL的执行时间、ResultSet持有时间、返回行数、更新行数、错误次数、错误堆栈信息。
SQL执行的耗时区间分布。什么是耗时区间分布呢?比如说,某个SQL执行了1000次,其中0~1毫秒区间50次,1~10毫秒800次,10~100毫秒100次,100~1000毫秒30次,1~10秒15次,10秒以上5次。通过耗时区间分布,能够非常清楚知道SQL的执行耗时情况。
监控连接池的物理连接创建和销毁次数、逻辑连接的申请和关闭次数、非空等待次数、PSCache命中率等。
其次,方便扩展。Druid提供了Filter-Chain模式的扩展API,可以自己编写Filter拦截JDBC中的任何方法,可以在上面做任何事情,比如说性能监控、SQL审计、用户名密码加密、日志等等。
Druid内置提供了用于监控的StatFilter、日志输出的Log系列Filter、防御SQL注入攻击的WallFilter。
与主流连接池的性能比较
场景一
单线程测试,连续执行100万次,对比时间、YungGC、FullGC的情况。这个场景用于测试非激烈竞争的情况下的性能差别。
测试结果
连续执行1000,000次,Druid和DBCP的测试对比结果:
连接池 时间(毫秒) YungGC FullGC
Druid 221 6 0
DBCP 1,606 70 0
BoneCP 762 4 0
场景二
多个线程,连续打开关闭连接1000,000次。
测试结果
连续执行1000,000次,Druid和DBCP的测试对比结果:
连接池 线程数量 时间(毫秒) YungGC FullGC
Druid 2 1,177 34 0
DBCP 2 2,738 139 0
BoneCP 2 2,242 8 0
Druid 5 3,7027 80 0
DBCP 5 39,203 350 0
Druid 10 11,172 162 0
DBCP 10 79,220 702 0
Druid 20 38,817 328 0
DBCP 20 159,966 1402 0
参考配置:
Xml代码
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="url" value="${jdbc_url}" />
<property name="username" value="${jdbc_user}" />
<property name="password" value="${jdbc_password}" />
<property name="filters" value="stat" />
<property name="maxActive" value="20" />
<property name="initialSize" value="1" />
<property name="maxWait" value="60000" />
<property name="minIdle" value="1" />
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<property name="minEvictableIdleTimeMillis" value="300000" />
<property name="validationQuery" value="SELECT 'x'" />
<property name="testWhileIdle" value="true" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<property name="poolPreparedStatements" value="true" />
<property name="maxPoolPreparedStatementPerConnectionSize" value="50" />
</bean>
上一篇: freemaker教程
下一篇: zookeeper 入门讲解实例 转
推荐阅读
-
Druid数据源SQL数据库与Spring监控
-
SpringBoot中使用com.alibaba.druid.filter.config.ConfigTools对数据库密码加密的方法
-
JSP Spring中Druid连接池配置详解
-
springboot activiti 整合项目框架源码 druid 数据库连接池 shiro 安全框架
-
Tomeat6.0 连接池数据库配置
-
荐 Java——数据库编程JDBC之数据库连接池技术(C3P0与Druid,提供了Druid的工具类)
-
关于数据库连接池Druid使用说明
-
PHP没有数据库连接池怎么破?PHP环境下使用Nginx ngx_http_limit_req_module模块的高负载解决方案
-
【⭐】Java—Spring-—数据库操作—使用内置连接池,报读取不到驱动错误。Could not load JDBC driver class。
-
数据库连接池工具类