1.测试环境:
硬件环境:
数据库服务器:2U*8核 8G内存
测试服务器: 2U*8核 6G内存
软件环境:
jdk:
1.6.29
mysql:
5.0.77
mysql_driver:
mysql-connector-java-5.0.8-bin.jar
DBCP:
commons-dbcp-1.4.jar
下载地址: http://commons.apache.org/dbcp/
commons-pool-1.5.6.jar
下载地址: http://commons.apache.org/pool/
C3P0:
c3p0-0.9.1.2.jar
下载地址: http://www.mchange.com/projects/c3p0/index.html
log4j-1.2.8.jar(c3p0需要添加此包)
下载地址: http://logging.apache.org/log4j/
Tomcat_JDBC:
tomcat-jdbc.jar
下载地址: https://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html
或者在tomcat安装根目录下的lib目录中直接拿来用之
tomcat-juli.jar
下载地址:(没找到)
在tomcat安装根目录下的bin目录中直接拿来用之
配置信息:
数据库连接超时时间设置为: 10年
数据库支持最大连接数设置为:2000
初始化连接池大小:10
连接至最小活动线程数:10
连接池最大活动线程数:100
其他配置均保持各个连接池的默认配置
2.性能测试: (测试代码见附件)
测试点:
在多线程多任务的条件下,各个连接池获取连接然后马上关闭连接,比较所消耗的时间。
在 上看了好多关于数据库连接池方面的测试,
大多数测试过程中,包括了执行sql语句部分,即,创建连接,执行sql语句,关闭连接,
一开始我也是这样测试,
测试过过程中,发现数据很不稳定, 这几个连接池都是忽快忽慢,
经过思考、分析,个人 觉得这样是不准确的,执行sql语句时,测试已经不是数据库连接池的性能了,
完全是数据库驱动程序(例如mysql_driver )和数据库本身的性能,
数据库连接池负责的仅仅是建立DataSource,获取(从连接池中获取)Connection,关闭(放回到连接池)Connection,
因此,
我在测试时,没有计算初始化连接池(建立DataSource)的时间,而是连接池“获取连接然后马上关闭连接”的时间。
测试结果:
平均消耗时间是每个用例测试了5次计算出来的
DB POOL | 线程数量 | 单线程 执行次数 |
平均消耗 时间(ms) |
平均单条 时间(ms) |
DBCP | 10 | 1000 | 251 | 0.0251 |
C3P0 | 10 | 1000 | 802.8 | 0.08028 |
TomcatJDBC | 10 | 1000 | 191.8 | 0.01918 |
DB POOL | 线程数量 | 单线程 执行次数 |
平均消耗 时间(ms) |
平均单条 时间(ms) |
DBCP | 100 | 1000 | 810.4 | 0.008104 |
C3P0 | 100 | 1000 | 2248.8 | 0.022488 |
TomcatJDBC | 100 | 1000 | 726 | 0.00726 |
DB POOL | 线程数量 | 单线程 执行次数 |
平均消耗 时间(ms) |
平均单条 时间(ms) |
DBCP | 150 | 1000 | 1854.4 | 0.012363 |
C3P0 | 150 | 1000 | 2990.8 | 0.019939 |
TomcatJDBC | 150 | 1000 | 861 | 0.00574 |
DB POOL | 线程数量 | 单线程 执行次数 |
平均消耗 时间(ms) |
平均单条 时间(ms) |
DBCP | 300 | 1000 | 3851.8 | 0.012839 |
C3P0 | 300 | 1000 | 6233.2 | 0.020777 |
TomcatJDBC | 300 | 1000 | 3403.8 | 0.011346 |
结论:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!