bbosspersistent 性能初探

来源:互联网 发布:淘宝客怎么做才能赚钱 编辑:程序博客网 时间:2024/05/29 18:47

针对bbosspersistent,在oracle 10上做了一个简单的性能测试:

 

  • 环境配置:

连接池最大连接数设置为10

连接池初始连接数位2

 

  • 测试场景:

300个线程并发往一张3字段的表中插入数据,每个线程执行3条记录插入操作

 

  • 测试结果:

插入完毕后,统计结果如下不使用事务 :357条/秒使用RW_TRANSACTION事务:820条/秒

 

  • 测试程序:

  package com.frameworkset.common.poolman;

import javax.transaction.RollbackException;

import com.frameworkset.orm.transaction.TransactionManager;

/**
 *
 * <p>Title: CurrentTest.java</p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2007</p>
 * @Date 2010-8-2 下午12:02:44
 * @author biaoping.yin
 * @version 1.0
 */
public class CurrentTest {
    public static void main(String[] args) throws InterruptedException {

//        for(int j = 0; j < 300; j ++)
//        {
//            CurrentTest i = new CurrentTest();
//            i.test(false);
//        }
       
        for(int j = 0; j < 300; j ++)
        {
            CurrentTest i = new CurrentTest();
            i.test(true);
        }

    }
   
    public void test(boolean usetx)
    {
        if(!usetx)
        {
            Task t = new Task();
            t.start();
        }
        else
        {
            TXTask t = new TXTask();
            t.start();
        }
           
    }
    static class Task extends Thread
    {

        /* (non-Javadoc)
         * @see java.lang.Thread#run()
         */
        @Override
        public void run() {
            DBUtil db = new DBUtil();
       
            try {

                db.executeInsert("insert into TEST_CURRENT(id,name) values(10,'test')");
               
                db.executeInsert("insert into TEST_CURRENT(id,name) values(10,'test')");
               
                db.executeInsert("insert into TEST_CURRENT(id,name) values(10,'test')");
               
                db.executeInsert("insert into TEST_CURRENT(id,name) values(10,'test')");

            } catch (Exception e) {

                e.printStackTrace();
            }
           
        }
       
    }
   
    static class TXTask extends Thread
    {

        /* (non-Javadoc)
         * @see java.lang.Thread#run()
         */
        @Override
        public void run() {
            DBUtil db = new DBUtil();
            TransactionManager tm = new TransactionManager();
            try {
                tm.begin(tm.RW_TRANSACTION);
                db.executeInsert("insert into TEST_CURRENT(id,name) values(10,'test')");
               
                db.executeInsert("insert into TEST_CURRENT(id,name) values(10,'test')");
               
                db.executeInsert("insert into TEST_CURRENT(id,name) values(10,'test')");
               
                db.executeInsert("insert into TEST_CURRENT(id,name) values(10,'test')");
                tm.commit();
            } catch (Exception e) {
                try {
                    tm.rollback();
                } catch (RollbackException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                e.printStackTrace();
            }
           
        }
       
    }
}

 

测试结果说明:
为什么启用RW_TRANSACTION事务后性能要好于没有启用事务的情况呢,这是由于数据库连接池的特性决定,连接池中的连接资源是一种共享资源,要想获取一个db connection,首先要获得pool中的共享锁,获取完毕后再释放锁。在没有事务上下文的情况下,每个db操作都是一个独立的事务,都会从db pool中获取连接,因此获取锁的次数比较频繁,这样就会导致性能下降;相反一个RW_TRANSACTION上下文中只会获取一个db connection,只有一次获取锁的情况,性能要好很多。

bbossgroups最新版本的下载地址:
http://sourceforge.net/projects/bboss/files/bbossgroups-2.0-RC/bbossgroups-2.0-RC.zip/download


注意同时要打两个补丁,补丁地址:
http://sourceforge.net/projects/bboss/files/bbossgroups-2.0-RC/bboss%20rpc%20classcast%20and%20timeout%20exception%20patch.zip/download

http://sourceforge.net/projects/bboss/files/bbossgroups-2.0-RC/cglib%20stackoverflow-patch.zip/download

 

测试用例下载地址:

http://dl.javaeye.com/topics/download/a26db146-d2b2-30a1-be50-c1db09664100

原创粉丝点击