java数据库连接池性能对比

来源:互联网 发布:邓肯马龙交手数据 编辑:程序博客网 时间:2024/05/18 01:38

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 codehttps://github.com/alibaba/druid/blob/master/src/test/java/com/alibaba/druid/benckmark/pool/Case1.java

  • test config

    propertyvalueinitialSize10minPoolSize10maxPoolSize50

测试各种并发场景下执行申请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 thread2 threads5 threads10 threads20 threads50 threads100 threadsdruid2487101,1331,1349051,1071,468dbcp6601,5223,5454,1763,6714,23714,129boneCP3,5222,9302,5793,7457,43411,99114,584c3p04,2759,5093,37110,43913,47219,84836,153proxool7,1877,70711,03710,77715,222(Error)18,100(Error)21,547(Error)tomcat-jdbc3727361,8791,7271,5761,32212,545jboss-datasource1,3261,1842,9283,7653,0993,27810,812

JDK 1.7.0_10

数据库连接池1 thread2 threads5 threads10 threads20 threads50 threads100 threadsdruid3096051,0289479628971,238dbcp9241,4614,0624,0304,9085,50514,517boneCP3,0472,0552,5493,8216,36712,86518,832c3p04,0188,2068,89710,66712,36725,82238,681proxool69124,7144,85111,90816,066(Error)19,568(Error)18,036(Error)tomcat-jdbc4007401,8111,7071,6181,62411,905jboss-datasource1,3691,1054,0023,0893,4833,66511,782

结果分析

  1. Druid是性能最好的数据库连接池,tomcat-jdbc和druid性能接近。
  2. proxool在激烈并发时会抛异常,完全不靠谱。在并发10的情况下,会使用11或者12个物理连接。
  3. c3p0和proxool都相当慢,慢到影响sql执行效率的地步。
  4. bonecp性能并不优越,采用LinkedTransferQueue并没有能够获得性能提升。
  5. jboss-datasource虽然稳定,但是性能很糟糕
  6. boneCP和c3p0完全不遵循minPoolSize的配置,只要有活动请求,就会用到maxPoolSize。
  7. bonecp和c3p0存在较大并发时使用的物理连接超过maxPoolSize数量,达到maxPoolSize+1
0 0
原创粉丝点击