java数据库连接池性能对比
这个测试的目的是验证当前常用数据库连接池的性能。
testcase
Connection conn = dataSource.getConnection();
PreparedStatement stmt = conn.preparedStatement("select 1");
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
}
rs.close();
stmt.close();
conn.close();
test config
property value initialSize 10 minPoolSize 10 maxPoolSize 50
测试各种并发场景下执行申请1,000,000(一百万)次总耗时的性能对比。
环境
- OS linux 3.5.0-19-generic X86_64
- CPU XEON E5-2450 双路共16核32物理线程
- Memory 48G
这是一台双路至强CPU的工作站,比我之前在mac book pro上做的测试,更接近真实服务器的运行环境。
JDK 1.6.0_38
| 数据库连接池 | 1 thread | 2 threads | 5 threads | 10 threads | 20 threads | 50 threads | 100 threads |
| druid | 248 | 710 | 1,133 | 1,134 | 905 | 1,107 | 1,468 |
| dbcp | 660 | 1,522 | 3,545 | 4,176 | 3,671 | 4,237 | 14,129 |
| boneCP | 3,522 | 2,930 | 2,579 | 3,745 | 7,434 | 11,991 | 14,584 |
| c3p0 | 4,275 | 9,509 | 3,371 | 10,439 | 13,472 | 19,848 | 36,153 |
| proxool | 7,187 | 7,707 | 11,037 | 10,777 | 15,222(Error) | 18,100(Error) | 21,547(Error) |
| tomcat-jdbc | 372 | 736 | 1,879 | 1,727 | 1,576 | 1,322 | 12,545 |
| jboss-datasource | 1,326 | 1,184 | 2,928 | 3,765 | 3,099 | 3,278 | 10,812 |
JDK 1.7.0_10
| 数据库连接池 | 1 thread | 2 threads | 5 threads | 10 threads | 20 threads | 50 threads | 100 threads |
| druid | 309 | 605 | 1,028 | 947 | 962 | 897 | 1,238 |
| dbcp | 924 | 1,461 | 4,062 | 4,030 | 4,908 | 5,505 | 14,517 |
| boneCP | 3,047 | 2,055 | 2,549 | 3,821 | 6,367 | 12,865 | 18,832 |
| c3p0 | 4,018 | 8,206 | 8,897 | 10,667 | 12,367 | 25,822 | 38,681 |
| proxool | 6912 | 4,714 | 4,851 | 11,908 | 16,066(Error) | 19,568(Error) | 18,036(Error) |
| tomcat-jdbc | 400 | 740 | 1,811 | 1,707 | 1,618 | 1,624 | 11,905 |
| jboss-datasource | 1,369 | 1,105 | 4,002 | 3,089 | 3,483 | 3,665 | 11,782 |
结果分析
- Druid是性能最好的数据库连接池,tomcat-jdbc和druid性能接近。
- proxool在激烈并发时会抛异常,完全不靠谱。在并发10的情况下,会使用11或者12个物理连接。
- c3p0和proxool都相当慢,慢到影响sql执行效率的地步。
- bonecp性能并不优越,采用LinkedTransferQueue并没有能够获得性能提升。
- jboss-datasource虽然稳定,但是性能很糟糕
- boneCP和c3p0完全不遵循minPoolSize的配置,只要有活动请求,就会用到maxPoolSize。
- bonecp和c3p0存在较大并发时使用的物理连接超过maxPoolSize数量,达到maxPoolSize+1
转自:https://github.com/alibaba/druid/wiki/linux-benchmark
java数据库连接池性能对比的更多相关文章
- [转帖]为什么HikariCP被号称为性能最好的Java数据库连接池,如何配置使用
为什么HikariCP被号称为性能最好的Java数据库连接池,如何配置使用 原创Clement-Xu 发布于2015-07-17 15:53:14 阅读数 57066 收藏 展开 HiKariCP是 ...
- 主流Java数据库连接池分析(C3P0,DBCP,TomcatPool,BoneCP,Druid)
主流数据库连接池 常用的主流开源数据库连接池有C3P0.DBCP.Tomcat Jdbc Pool.BoneCP.Druid等 C3p0: 开源的JDBC连接池,实现了数据源和JNDI绑定,支持JDB ...
- Java数据库连接池
转载过来的,最近在做一个小网站,准备使用这种方法. Java jdbc数据库连接池总结! 1. 引言 近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及, ...
- Java数据库连接池详解
http://www.javaweb1024.com/java/JavaWebzhongji/2015/06/01/736.html 对于共享资源,有一个很著名的设计模式:资源池(Resource P ...
- Java数据库连接池封装与用法
Java数据库连接池封装与用法 修改于抄袭版本,那货写的有点BUG,两个类,一个用法 ConnectionPool类: package com.vl.sql; import java.sql.Conn ...
- 一个JAVA数据库连接池实现源码
原文链接:http://www.open-open.com/lib/view/open1410875608164.html // // 一个效果非常不错的JAVA数据库连接池. // from:htt ...
- Java数据库连接池的几种配置方法(以MySQL数据库为例)
Java数据库连接池的几种配置方法(以MySQL数据库为例) 一.Tomcat配置数据源: 前提:需要将连接MySQL数据库驱动jar包放进Tomcat安装目录中common文件夹下的lib目录中 1 ...
- lua、groovy嵌入到java中的性能对比(转)
lua和groovy都是可以嵌入到java中的脚本语言.lua以高性能著称,与C/C++在游戏开放中有较多使用,groovy是一个基于Java虚拟机(JVM)的敏捷动态语言,在jvm下有着不错的性能. ...
- 2017年的golang、python、php、c++、c、java、Nodejs性能对比(golang python php c++ java Nodejs Performance)
2017年的golang.python.php.c++.c.java.Nodejs性能对比 本人在PHP/C++/Go/Py时,突发奇想,想把最近主流的编程语言性能作个简单的比较, 至于怎么比,还是不 ...
随机推荐
- 易出错的C语言题目之二:指针
一.写出输出结果 #include<stdio.h> int main(){ ]; a[] = ; a[] = ; a[] = ; int *p,*q; p = a; q = &a ...
- paip.hibernate save 失败的解决
paip.hibernate save 失败的解决 打开log debug level,,看不见insert 代码... Hibernate select max(ID).txt ...
- iOS开发--JSON
1.什么是JSON? JSON(JavaScript Object Notation)在网络传输中几乎无处不在,JSON是一种轻量级的数据交换格式,是基于JavaScript(Standard ECM ...
- Less安装与使用
Less是一门CSS预处理语言,它扩展了CSS语言,增加了变量.Mixin.函数等特性,使CSS更易维护和拓展.(less可以运行在node或浏览器端) 首先:安装+配置环境 在node.js中通过它 ...
- UIScrollView offset in UINavigationController
转:UIScrollView offset in UINavigationController 通过设置viewCtronller的 self.automaticallyAdjustsScrollVi ...
- .svn批量删除
c.bat @echo on @rem 删除SVN版本控制目录 @rem for /r . %%a in (.) do @if exist "%%a\.svn" @echo &qu ...
- Swift - 计算文本高度
Swift - 计算文本高度 效果 源码 // // String+StringHeight.swift // StringHeight // // Created by YouXianMing on ...
- [MS bug]安装SQL Server 2008 错误:is not a valid login or you do not have permission
环境: Windows 7 sp1 x64. 问题描述: 安装到几乎要完成的时候爆出:is not a valid login or you do not have permission.安装失败. ...
- 专访高磊:安卓APK安全加固的引领者
高磊,爱加密CEO,安卓巴士版主之一,曾编写河南省某地市交通信息化规划十二五规划,以及参与省厅级资源共享平台设计等.之前的工作经理积累了丰富的设计规划经验,此外还具有J2EE和 Android开发经验 ...
- Docker实践(2)—虚拟网络
1 docker(container)的虚拟网络 docker的虚拟网络结构: host创建一个虚拟bridge,每个container对应一个虚拟网络设备(TAP设备),与bridge一起构成一个虚 ...