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
- bbosspersistent 性能初探
- MySQL分区性能初探
- Mysql分区性能初探
- MySQL分区性能初探
- C++性能开销初探
- 初探网络性能测试
- Android 性能测试初探
- OPENCV性能初探
- MySQL分区性能初探
- iOS 性能专项初探
- MySQL分区性能初探
- MySQL分区性能初探
- MySQL分区性能初探
- 初探网络性能测试
- Android 性能测试初探
- MySQL分区性能初探
- 服务器性能优化初探
- Intel VT技术性能初探
- 批处理加密工具
- 正确使用内存
- java 回调机制小结
- LAMP----linux+apache+mysql+php详细安装步骤之二mysql篇
- Fedora中如何安装scim输入法
- bbosspersistent 性能初探
- 业务集成中间件软件的新锐:企业服务总线
- POJ 1061 青蛙的约会
- Kohana ORM 规则详解
- ADHelper 活动目录用户操作类
- c编程注意规范
- Flash 不缓存XML 数据 用时间戳getTime(非getTimer)抗拒缓存
- 利用錯誤的MIME頭實行攻擊--1
- C++程序内存的分配问题