`
g21121
  • 浏览: 694723 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

c3p0性能测试

 
阅读更多

        c3p0的使用我们基本已经了解,下面这个测试是用来测试c3p0的性能如何,测试有一定的局限性,仅供参考。大家可以根据项目情况来配置c3p0的各种属性值,配置之后进行测试,最终找到最合理的配置方案。

 

        1.改造我们原来的代码:
        将DataSource 提取出来,应为在实际应用之中DataSource是只创建一次,不会每次访问数据库重新创建。我们可以将之声明为static 或像下列代码中一样由外部传入。这种方式类似于Spring 对DataSource 的管理方式。
        Statement 与connection 的实例可以有多个只有用的时候才创建,用完需要close() ,否则会出现连接被占用的情况。

package com.test.jdbc.dao.impl;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.test.jdbc.dao.TestDAO;

public class TestDAOImpl implements TestDAO {

    /**
     * c3p0实现
     */
    public void getUsrInfoWithC3P0(ComboPooledDataSource cpds,Integer usrId) {
        // c3p0的DataSource实例
        String sql="SELECT * FROM USER u WHERE u.USR_ID=" + usrId;
        try {
            // 获取连接
            Connection conn=cpds.getConnection();
            Statement st=conn.createStatement();
            ResultSet result=st.executeQuery(sql);
            result.close();
            st.close();
            conn.close();
        }catch(SQLException e) {
            e.printStackTrace();
        }
    }
}

 

 

        2.修改main 函数:
        我们做10次,100次,1000次查询数据库操作,每种情况重复100次来观察消耗时间的波动范围,因为查询1万次耗时较多这里就不做实验了。

package com.test.jdbc.main;

import java.beans.PropertyVetoException;
import java.io.IOException;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.test.jdbc.dao.TestDAO;
import com.test.jdbc.dao.impl.TestDAOImpl;

public class Main {

    static String driver = "com.mysql.jdbc.Driver";

    static String jdbcUrl = "jdbc:mysql://192.168.0.1:3306/test";

    static String user = "dba";

    static String passwd = "dba";

    public static void main(String[] args) throws IOException {
        TestDAO testDAO = new TestDAOImpl();
        ComboPooledDataSource cpds = getC3p0DataSource();
        // 运行100次
        for (int i = 0; i < 100; i++) {
            queryC3p0(testDAO, cpds, 1000);
        }
    }

    /**
     * 获取c3p0数据源
     */
    public static ComboPooledDataSource getC3p0DataSource() {
        // 设置参数
        ComboPooledDataSource cpds = new ComboPooledDataSource();
        try {
            cpds.setDriverClass(driver);
        } catch (PropertyVetoException e) {
            e.printStackTrace();
        }
        cpds.setJdbcUrl(jdbcUrl);
        cpds.setUser(user);
        cpds.setPassword(passwd);
        cpds.setMinPoolSize(5);
        cpds.setAcquireIncrement(5);
        cpds.setMaxPoolSize(20);
        return cpds;
    }

    public static void queryC3p0(TestDAO testDAO, ComboPooledDataSource cpds,
        int count) {
        Integer usrId = 9900;
        long startMillis = System.currentTimeMillis();
        // 测试c3p0查询
        for (int i = 0; i < count; i++) {
            testDAO.getUsrInfoWithC3P0(cpds, usrId);
        }
        long endMillis = System.currentTimeMillis();
        System.out.println(endMillis - startMillis);
    }
}

 

 

        将运行结果复制到excel表格中,利用excel的图表功能生成几种测试的耗时波动图表(单位:毫秒):
       

        1.查询10次数据库,重复100次结果:



 
        2.查询100次数据库,重复100次结果:



 

        3.查询1000次数据库,重复100次结果:



        平均值:

        10次查询:61毫秒

        100次查询:680毫秒

        1000次查询: 5184毫秒

  • 大小: 38.4 KB
  • 大小: 20 KB
  • 大小: 26.9 KB
1
2
分享到:
评论
2 楼 g21121 2013-08-02  
Francis_java 写道
那些峰值是怎么产生的?
连接池中的资源没有及时释放么,是不是阈值设置的问题

我只设置了几个基本属性,其余都是默认值,你可以试试调优属性后的情况
1 楼 Francis_java 2013-08-02  
那些峰值是怎么产生的?
连接池中的资源没有及时释放么,是不是阈值设置的问题
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    数据源性能测试用例,C3P0,Druid,Tomcat

    数据源性能测试用例,C3P0,Druid,Tomcat 解压缩密码,去blog找吧http://blog.csdn.net/xzknet/article/details/49127701

    c3p0所依赖的jar包

    2. 自动管理:C3P0能自动检测并回收空闲超时的连接,防止资源浪费。同时,它还支持自动重试机制,如果连接因网络问题断开,C3P0会尝试重新建立连接。 3. 连接测试:C3P0提供了多种测试连接有效性的策略,如简单的...

    c3p0-0.9.5.1

    3. **异常处理**:如果检测到数据库连接出现问题,如超时或网络故障,C3P0会自动尝试恢复连接,确保应用程序的连续性。 4. **性能监控**:C3P0提供了丰富的统计信息,包括连接使用情况、异常信息等,有助于开发者...

    C3P0相关的JAR包

    - 自动检测:C3P0具有自动检测失效连接并进行回收的能力,确保应用使用的连接始终有效。 - 扩展性:C3P0允许配置多个数据源,便于系统扩展和负载均衡。 - 动态调整:可以动态调整连接池的大小,适应系统负载的...

    C3P0连接池配置需要的jar包

    C3P0的一些关键特性包括自动检测并回收无效连接、连接测试策略、连接生命周期管理等。 2. **hibernate-c3p0-4.0.0.Final[1].jar**: 这个JAR文件是Hibernate对C3P0连接池的支持模块。Hibernate是一个流行的Java对象...

    c3p0连接池jar包

    2. 自动检测与回收:C3P0支持定期检查连接的健康状态,若发现连接已断开或不可用,会自动销毁并重新创建新的连接,确保应用的稳定性。 3. 超时与空闲连接处理:C3P0允许设置连接的获取、使用和空闲超时,避免长时间...

    C3P0使用所需要的jar包

    2. **自动检测与回收**:C3P0可以定期检查连接的有效性,发现无效或损坏的连接时会自动回收,保证了应用的稳定性。 3. **连接池参数调整**:C3P0提供了丰富的配置选项,允许用户根据实际需求调整连接池的大小、超时...

    c3p0所需jar包

    C3P0是一款开源的Java连接池,全称为ComMChange V2 C3P0,由M. J. Franklin创建并维护。它提供了一种高效、灵活且强大的数据库连接管理方式,广泛应用于Java应用程序中,特别是对于那些需要大量并发数据库访问的Web...

    C3P0的jar包

    2. **自动检测和回收死锁**:C3P0具有内置的机制来检测和处理长时间未使用的连接,避免因数据库连接泄漏导致的问题。 3. **连接测试**:在分配给应用程序之前,C3P0会自动对数据库连接进行有效性测试,确保获取的...

    c3p0的jar包

    2. **自动检测与回收**:C3P0可以定期检查池中的连接是否有效,如果发现无效或过期的连接,会自动进行回收,以确保应用始终能获得健康的数据库连接。 3. **连接池扩展性**:C3P0允许用户自定义连接池的最大和最小...

    springMVC整合C3P0连接池

    C3P0是一个完全兼容JDBC3规范的连接池实现,提供了连接测试、空闲连接检测、自动关闭无效连接等功能。其主要优势在于它可以自动管理数据库连接的创建和释放,减少了频繁建立和关闭连接的开销,从而提高了系统的运行...

    c3p0-0.9.2.1 jar包.rar

    3. **自动检测与恢复**:C3P0具有检测失效连接并自动替换的功能,确保连接池中的每个连接都是有效的。通过`testConnectionOnCheckout`和`testConnectionOnCheckin`属性,可以在获取和归还连接时进行健康检查。 4. *...

    c3p0需要的所有的jar包(完整)

    - **异常处理**:C3P0提供了异常检测和处理机制,当数据库连接出现问题时,它会尝试重新建立连接,确保应用的稳定性。 - **线程安全**:C3P0完全支持多线程环境,每个线程都能获取到独立的数据库连接,互不干扰。 ...

    c3p0用法步骤

    在Java Web开发中,C3P0常被用于管理和维护数据库连接资源,以提高应用程序的性能和响应速度。以下是对C3P0配置与使用的详细步骤和关键知识点的阐述。 ### 配置init.properties文件 在使用C3P0前,首先需要配置`...

    C3P0用到的jar包和配置文件.zip

    C3P0的主要功能包括自动管理数据库连接的创建、分配、回收和销毁,以及在数据库连接空闲时进行检测和维护,确保连接的有效性。 `mchange-commons-java-0.2.10.jar`是Mchange Commons Java库,它是C3P0的依赖库,...

    C3P0-jar包和依赖包.zip

    - **连接生命周期管理**:C3P0提供自动的连接回收、检测和重用机制,以确保连接的有效性和安全性。 - **异常处理**:C3P0库对数据库操作的异常进行了封装,提供了更友好的错误处理方式。 - **池化对象...

    C3P0使用,C3P0源码及实例

    C3P0的源码分析可以帮助开发者深入理解其内部工作机制,包括连接的创建、检测、回收以及异常处理等。源码中的关键类有`ComboPooledDataSource`(数据源)、`PoolableConnectionFactory`(连接工厂)和`...

Global site tag (gtag.js) - Google Analytics