- 浏览: 695835 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (364)
- quick start (57)
- bboss aop (43)
- bboss mvc (48)
- bboss persistent (96)
- bboss taglib (30)
- bboss event (10)
- bbossgroups (52)
- bboss (32)
- bboss会话共享 (17)
- bboss rpc (7)
- bboss 国际化 (5)
- bboss 序列化 (9)
- bboss cxf webservice (8)
- bboss hessian (3)
- bboss 安全认证SSO (15)
- bboss 工作流 (6)
- 平台 (18)
- bboss quartz (3)
- 杂谈 (5)
- 大数据 (1)
- bboss elastic (24)
- bboss http (1)
- bboss kafka (1)
- Elasticsearch Scroll和Slice Scroll查询API使用案例 (1)
最新评论
-
qianhao123:
...
采用gradle构建和发布bboss方法介绍 -
qianhao123:
[img][/img]
采用gradle构建和发布bboss方法介绍 -
yin_bp:
欢迎大家参与working
高性能elasticsearch ORM开发库使用介绍 -
qq641879434:
万分感谢
bboss 持久层sql xml配置文件编写和加载方法介绍 -
yin_bp:
qq641879434 写道怎么设置配置文件 可以查看执行的S ...
bboss 持久层sql xml配置文件编写和加载方法介绍
针对bbosspersistent,在oracle 10上做了一个简单的性能测试:
环境配置:
连接池最大连接数设置为10
连接池初始连接数位2
测试场景:
300个线程并发往一张3字段的表中插入数据,每个线程执行3条记录插入操作
测试结果:
插入完毕后,统计结果如下
不使用事务 :357条/秒
使用RW_TRANSACTION事务:820条/秒
测试程序:
测试结果说明:
为什么启用RW_TRANSACTION事务后性能要好于没有启用事务的情况呢,这是由于数据库连接池的特性决定,连接池中的连接资源是一种共享资源,要想获取一个db connection,首先要获得pool中的共享锁,获取完毕后再释放锁。在没有事务上下文的情况下,每个db操作都是一个独立的事务,都会从db pool中获取连接,因此获取锁的次数比较频繁,这样就会导致性能下降;相反一个RW_TRANSACTION上下文中只会获取一个db connection,只有一次获取锁的情况,性能要好很多。
影响持久层操作性能因素分析:
1.频繁地申请连接池中连接会导致性能降低
2.频繁地释放数据库连接到连接池中也会导致性能降低
3.开启连接池中连接校验特性会导致新能降低
连接池连接在以下情况下会执行校验逻辑:
a.申请连接(默认开启),可以通过以下方式进行控制
<testOnBorrow>false</testOnBorrow>
b.释放连接(默认关闭),可以通过以下方式进行控制(目前bboss没有开放改配置开关,即使配置也无效)
<testOnReturn>false</testOnReturn>
c.空闲连接回收扫描操作(默认关闭),可以通过以下方式进行控制
<testWhileIdle>true</testWhileIdle>
同时我们也可以通过指定validationQuery属性来控制执行校验操作时是否执行一条指定的sql语句,来校验连接的可用性,而且在执行的时候会占用共享锁,这个性能开销比较大。
我们可以不配置validationQuery属性来提升系统性能
4.开启强制回收长时间占用连接机制,会对性能有一定的影响,屏蔽方法:
<removeAbandoned>false</removeAbandoned>
removeAbandoned开关主要在开发环境下开启,用来检测是否有泄露的事务链接,并且在连接占用比较多的情况下,回收占用时间较长的链接,生产环境下必须将removeAbandoned设置为false。
上述4个因素也可以通过在编程过程采用数据库事务来优化性能,将密集的数据操作包含在事务中,bboss数据库事务开启方法:
或者
详细的数据库事务请参考文档bbossgroups培训.ppt 中的事务管理部分
同时也可以参考另一篇文章《bbossgroups持久层框架链接池配置优化策略之一 空闲链接回收配置》
5.补充说明
如果你的应用部署在weblogic或者websphere下面,尽量使用应用服务器本身的数据源,bboss持久层中配置外部数据源的方法参考文档《bboss persistent通过jndi引用外部数据源(datasource)方法》
环境配置:
连接池最大连接数设置为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 (Throwable 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 (Throwable 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,只有一次获取锁的情况,性能要好很多。
影响持久层操作性能因素分析:
1.频繁地申请连接池中连接会导致性能降低
2.频繁地释放数据库连接到连接池中也会导致性能降低
3.开启连接池中连接校验特性会导致新能降低
连接池连接在以下情况下会执行校验逻辑:
a.申请连接(默认开启),可以通过以下方式进行控制
<testOnBorrow>false</testOnBorrow>
b.释放连接(默认关闭),可以通过以下方式进行控制(目前bboss没有开放改配置开关,即使配置也无效)
<testOnReturn>false</testOnReturn>
c.空闲连接回收扫描操作(默认关闭),可以通过以下方式进行控制
<testWhileIdle>true</testWhileIdle>
同时我们也可以通过指定validationQuery属性来控制执行校验操作时是否执行一条指定的sql语句,来校验连接的可用性,而且在执行的时候会占用共享锁,这个性能开销比较大。
我们可以不配置validationQuery属性来提升系统性能
<!-- 链接有效性检查sql语句 --> <validationQuery>select 1 from dual</validationQuery>
4.开启强制回收长时间占用连接机制,会对性能有一定的影响,屏蔽方法:
<removeAbandoned>false</removeAbandoned>
removeAbandoned开关主要在开发环境下开启,用来检测是否有泄露的事务链接,并且在连接占用比较多的情况下,回收占用时间较长的链接,生产环境下必须将removeAbandoned设置为false。
上述4个因素也可以通过在编程过程采用数据库事务来优化性能,将密集的数据操作包含在事务中,bboss数据库事务开启方法:
TransactionManager tm = new TransactionManager(); try { tm.begin(tm.RW_TRANSACTION); //db操作 tm.commit(); } catch (Throwable e) { try { tm.rollback(); } catch (RollbackException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } e.printStackTrace(); }
或者
TransactionManager tm = new TransactionManager(); try { tm.begin(); //db操作 tm.commit(); } catch (Throwable e) { try { tm.rollback(); } catch (RollbackException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } e.printStackTrace(); }
详细的数据库事务请参考文档bbossgroups培训.ppt 中的事务管理部分
同时也可以参考另一篇文章《bbossgroups持久层框架链接池配置优化策略之一 空闲链接回收配置》
5.补充说明
如果你的应用部署在weblogic或者websphere下面,尽量使用应用服务器本身的数据源,bboss持久层中配置外部数据源的方法参考文档《bboss persistent通过jndi引用外部数据源(datasource)方法》
- common-dbcp并发测试.zip (3.8 KB)
- 下载次数: 9
发表评论
-
bboss 持久层数据源引用外部属性配置介绍
2018-12-29 21:47 1085bboss 持久层数据源外部属性配置引用介绍 bboss持久 ... -
bboss持久层开启和关闭自带主键机制
2017-08-17 11:56 754bboss持久层开启和关闭自带主键机制 请访问文档: bbos ... -
bboss高性能db批处理功能使用方法介绍
2017-05-14 21:28 2139bboss持久层在v5.0.3.5中新增简单的高效的db批处理 ... -
bboss持久层公共sql片段定义和引用方法说明
2017-03-03 13:05 1124bboss持久层公共sql片段定义和引用方法说明 在配置sq ... -
最新版本mysql jdbc驱动包获取表定义信息空指针异常处理方法
2016-12-15 10:24 1360在使用最新的mysql-connector-java 6.0. ... -
持久层快速入门系列一
2016-08-19 13:00 1261持久层快速入门 先在应用中导入bboss 持久层(bboss ... -
bboss与spring中配置和引用bboss数据源和bboss dao组件方法说明
2016-08-10 16:04 918首先在项目中导入bboss 持久层包: maven坐标 & ... -
bboss 持久层sql xml配置文件编写和加载方法介绍
2016-04-05 13:14 1672bboss 持久层sql xml配置文件编写和加载方法介绍 通 ... -
bboss持久层设置数据库查询fetchsize参数方法
2015-11-06 11:54 1017bboss持久层设置数据库查询fetchsize参数方法 j ... -
bboss持久层快速入门教程
2015-09-19 13:49 1589bboss持久层快速入门教程,快速搭建bboss持久层的开 ... -
bboss持久层数据库适配器编写和注册方法
2015-02-06 15:21 977bboss持久层数据库适配器编写和注册方法 bboss持久层默 ... -
bboss模糊查询、动态sql、批处理资料荟萃
2015-01-30 12:03 2369bboss模糊查询、动态sql、批处理资料荟萃 bboss持 ... -
bboss持久层查询元数据缓存机制开启方法
2014-11-18 12:03 1022bboss持久层为了提升数据库查询操作性能,提供了对查 ... -
bboss内置数据源apache dbcp与druid数据源切换方法
2014-09-23 09:59 1388bboss内置数据源与druid数据源切换方法 bboss内置 ... -
bboss持久层多数据源配置及多数据库事务控制使用方法
2014-05-11 20:24 2974bboss持久层多数据源配置及使用方法,持久层框架及demo下 ... -
bboss持久层demo使用说明
2014-03-11 09:38 1210持久层案例可以用svn客户端下载eclipse工程,导入ecl ... -
bboss持久层More分页查询API使用介绍
2013-10-18 16:17 1476为了更好地提高数据库分页查询的效率,bboss持久层在Conf ... -
bboss持久层操作Clob和Blob字段示例
2013-09-09 13:29 1230bboss持久层操作Clob和Blob非常方便,基于bboss ... -
bboss持久层ormaping机制详解
2013-09-04 21:04 1157bboss持久层针对db操作即提供了原始sql语句的支持,又提 ... -
bboss持久层改进支持模块sql配置文件引用其它模块sql配置文件中sql语句
2013-09-01 22:23 932bboss持久层改进支持模块sql配置文件引用其它模块sql配 ...
相关推荐
《基于CORBA的分布式应用软件网络性能初探——单次调用传输的数据量大小对有效吞吐量的影响》 本文探讨了在分布式应用软件中,尤其是针对导航系统,基于CORBA(Common Object Request Broker Architecture)的...
标题中的"Al_CuO-SCB含能半导体桥电爆和点火性能初探"涉及到的是一个关于半导体桥(Semiconductor Bridge, SCB)的研究,特别是探讨了一种新型的含能材料——铝/氧化铜(Al/CuO)在半导体桥中的应用,以及其在电爆...
【北斗系统双模网络实时动态差分法组合定位性能初探】 本文主要探讨了北斗系统在结合GPS系统后,利用双模网络实时动态差分法(RTK)进行定位的性能提升及其应用潜力。北斗系统作为中国自主研制的全球卫星导航系统,...
本篇研究论文主要围绕磺酸甲胺基聚环氧琥珀酸(SMA/PESA)的合成及其缓蚀性能展开探讨。研究团队由张云和周钰明组成,隶属于东南大学化学化工学院。文章首先通过化学反应过程详细描述了合成SMA/PESA的方法,并通过...
Sandy Bridge是Intel推出的一款处理器架构,以其集成的GPU(图形处理单元)性能强大而备受关注。这款处理器的GPU核心被称为“史上最强整合图形核心”,它不仅在处理器性能上有所突破,更在图形处理能力上达到了...
基于Oracle 11g表性能优化初探.pdf
基于Oracle数据库的数据存取性能优化初探.pdf
《Sybase SQL Server性能优化技术初探》这篇文章主要探讨了如何优化Sybase SQL Server的性能,以应对现代数据库系统面临的挑战。随着数据量的不断增长,数据库管理系统需要更高效的管理和利用数据。文章从多个角度...
结合GB/T 213—2008要求开展热量计的性能试验研究,通过开展热容量精密度、有效工作范围及发热量的准确度的相关实验工作,得到某热量计测定发热量的有效范围及测量准确度。试验结果表明:该热量计的5次热容量标定结果...
随着移动应用的广泛流行,用户对手机性能的要求日益提高。特别是在安卓平台上,性能测试变得尤为重要。性能测试不仅仅是简单地检测应用的运行状况,它更关乎用户体验的优化。好的性能测试能够帮助开发团队发现应用中...
光学复合纳米纤维的制备及性能研究初探,王晓英,吴楠楠,利用静电纺丝法成功制备了联吡啶钌掺杂的多壁碳纳米管/聚丙烯酸树脂光学复合纳米纤维(Ru-MWNTs-S100)。采用扫描电子显微镜 (FESEM )、�
【微软高性能运算系列课程(1):WCCS初探——微软高性能运算平台】 高性能计算(High Performance Computing,HPC)是计算机科学的一个分支,它致力于解决需要大规模计算能力的问题。微软高性能运算平台(Microsoft ...
【Oracle数据库高性能优化设计方法初探】 Oracle数据库作为业界广泛使用的商业关系型数据库,因其在处理大规模数据时的优秀性能而备受青睐。然而,要充分利用Oracle的优势,必须对其工作原理和系统结构有深入理解,...
【安全疏散性能化消防设计初探】 在当前的建筑消防设计中,安全疏散性能化设计是一种新兴且具有前瞻性的理念,旨在克服传统规范存在的局限性,确保人员安全并提高建筑设计的灵活性。传统的消防规范通常采用明细条...
高性能混凝土技术发展及应用初探 高性能混凝土(High Performance Concrete,HPC)是现代混凝土技术的先进代表,其设计理念在于显著提升混凝土的耐久性、强度和工作性能。HPC 的出现源于对传统混凝土性能的改进需求...
### IBM之Java性能诊断工具初探—IBM Support Assistant的使用 #### 一、引言 随着信息技术的飞速发展,企业级应用系统变得越来越复杂,性能优化成为了保证系统高效稳定运行的关键因素之一。Java作为跨平台的语言...