ibatis 性能优化

IBatis性能几点优化


IBatis on Oracle的性能优化

我们先主要看2个参数

1.defaultRowPrefetch of oracle

2.enhancementEnabled of IBatis

环境

1. Java HotSpot(TM) Server VM (build 1.5.0_12-b04, mixed mode)

Java HotSpot(TM) Server VM (build 1.6.0_05-b13, mixed mode)

2. Intel(R) Core(TM)2 CPU T7400 @ 2.16GHz L2 4M

3. JVM OPTION -Xms512m -Xmx1024m -XX:PermSize=96m

从数据库中读取10000行, 5列数据情况, Java Bean对象大约不到100个属性。循环20次, 外加5次的赃数据。

A. defaultRowPrefetch=default enhancementEnabled=false/true 754ms/743ms

B. defaultRowPrefetch=50 enhancementEnabled=false/true 389ms/382ms

C. defaultRowPrefetch=100 enhancementEnabled=false/true 319ms/319ms

D. defaultRowPrefetch=200 enhancementEnabled=false/true 277ms/274ms

E. defaultRowPrefetch=500 enhancementEnabled=false/true 251ms/250ms

F. defaultRowPrefetch=1000 enhancementEnabled=false/true 242ms/238ms

G. defaultRowPrefetch=1000 enhancementEnabled=true 237ms(JAVA6)

H. defaultRowPrefetch=200 enhancementEnabled=true 271MS(JAVA6)



结以上情况, 在数据行比较多的情况下, defaultRowPrefetch值的提高, 对于性能的影响是显著的, 但是,
这个提升是牺牲很多内存为代价的, 因此, 如果过高的defaultRowPrefetch值会导致内存比较紧张。 另外值得说明的是,
在一样的参数前提下, JAVA6对于性能还是有一定的提升的。对于比较大的查询,
defaultRowPrefetch经验值应该是200还是合理的。 另外, 对于enhancementEnabled选项带来的收益,
相对来说比较少。 但是,对于高压力的系统, 这是无IO等待下情况的代码执行提高这些是非常值。


以上的测试数据列数比较少,
因此在JAVA BEAN的建立上是非常的节约时间的, 我们看看在差不多100个属性的填充下的性能表现,
我们已经知道了defaultRowPrefetch带来收益的经验值。 因此, 我们设置defaultRowPrefetch=200.

[i]A. defaultRowPrefetch=200 enhancementEnabled=false 1736ms

B. defaultRowPrefetch=200 enhancementEnabled=true 1721ms

C. defaultRowPrefetch=50 enhancementEnabled=true 1866ms[/i]

[i]


OK,
enhancementEnabled继续表明对性能的提升作用很小, 但是列的数据大小对性能的影响是非常大的。 但是,
我们无法确定这个时间是消耗在Java Bean 填充上 还是列读取上。IBatis没有具体的办法测试。 不过, 在减少结果参数说明的情况下,
性能能得到明显的提升, 我们还是可以断定, JAVA BEAN的被声明成结果映射的时候, 尽量减少结果映射的列,可以获得很高性能的提升。
因此, 使用IBatis操作大量的数据的表, 建议只映射应该获取到的数据, 而不是全部的列。 select * from db
where... 你可以取需要的列到java bean. 总而言之: select * from db where...
这样的形式对性能影响比 把所有的列映射到Java Bean 来的小! set bean property +
ResultSet.getXXX(int index)的操作消耗了大部分的性能。


一些代码片段:

数据原的定义

oracle.jdbc.OracleDriverjdbc:oracle:thin:@10.0.0.1:1521:testtesttest

[size=medium;]50[/size]







为单个SQL查询定义defaultRowPrefetch, 在IBatis的定义中为fetchSize


[size=medium;]fetchSize="200"[/size]
>



CGLIB增强定义


[/i]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值