`

ibatis性能问题

    博客分类:
  • java
 
阅读更多

最近在某个项目进行性能测试过程中发现ibatis一个比较严重的性能问题

dump下来的的线程发现大量线程处于BLOCKED状态,都在等待资源0x00000000928ede88,接口大多数为查询功能,按理不应该那么多的sql查询功能的线程处于clocked状态


同时进一步全文搜索被锁住的0x00000000928ede88资源,发现运行状态线程pool-4-thread-1629正在锁住资源0x00000000928ede88



 
为了分析产生该问题的原因,定位对应源代码发现锁住的资源为net.sf.cglib.core.AbstractClassGenerator$Source


进一步分析发现可以看出被锁住的Source为静态类变量,作用于所有的Generator实例,因此相当于要求调用BulkBean#create()调用顺序同步的,不允许多线程并发。再回过头看发现锁住的功能刚好为ibatis执行sql更新功能,更新进行行锁,比较耗费性能,因此就可以解释为何有大量查询语句的线程处于等待锁的状态

 最后我们分析一下为什么会执行ibatis的这段代码以及它的作用是什么,我们会发现在ibatis中应用了cglib的字节码增强功能则会执行该代码(bean对象字节增加功能, 有兴趣的同学可以看看CGLIB中BulkBean的使用),因此我们将enhancementEnable=false则不会进行字节增强功能


 最后我们查阅资料发现,别人遇到过类似的问题(这是我给MYBATIS开发团队的邮件部分, 不翻译:)):

IBtatis automatic decide a simple bean that property have no Getter method to be Complex type. Mybatis does not prompt any warning enhancementEnable option will be skipped. I think these mybatis exception handling is not smooth. and If user's bean loose some Getter method, a common user does not know why mybatis performance become bad.

一个对象由于Getter方法的缺失, Mybatis把这个对象的当做复杂对象, 从而, 导致enhancementEnable=true的定义失去了任何作用, 进一步导致ibatis的性能下降

  • 大小: 198.9 KB
  • 大小: 176.4 KB
  • 大小: 42.7 KB
  • 大小: 32.6 KB
  • 大小: 300.5 KB
  • 大小: 38 KB
分享到:
评论

相关推荐

    ibatis和mybatis对比

    ibatis和mybatis对比

    iBATIS实战

    1.4 iBATIS如何解决数据库的常见问题 20 1.4.1 所有权与控制 20 1.4.2 被多个分散的系统访问 21 1.4.3 复杂的键和关系 21 1.4.4 数据模型的去规范化或过度规范化 22 1.4.5 瘦数据模型 23 1.5 小结 24 第2章 iBATIS...

    maven3+struts2+spring+ibatis

    maven3+struts2+spring+ibatis,本来是用maven3+struts2+spring+hibernate但考虑到hibernate在多表级联查询的时候执行效率不高,所以改用性能更好不过sql比较麻烦的的ibatis,本项目只有登录和插入数据,仅供参考: ...

    iBatis 轻量级持久层架构

    iBatis 1、Spring嵌套iBatis框架 2、iBatis调用存储过程 3、iBatis中设置动态表查询 4、提高iBATIS性能的几个注意点

    hibernate与ibatis比较的11大优势

    Hibernate在解决性能问题方面做得非常好。有了它的缓存机制,使用第三方缓存和数据库连接池,就较好的解决的性能问题。但这些还不够,hibernate给了开发者足够的自由,让开发者自己去控制性能问题。 学习了一段...

    iBATIS3与JDBC性能对比

    NULL 博文链接:https://fuchao01.iteye.com/blog/551438

    ibatis 总结

    这是关于ibatis 的一些总结, 其中包含ibatis 、hibernate、jdbc三者之间的性能对比,以及ibatis的配置

    ibatis 开发指南(pdf)

    “半自动化”的ibatis,却刚好解决了这个问题。 这里的“半自动化”,是相对Hibernate 等提供了全面的数据库封装机制的“全自动化” ORM 实现而言,“全自动”ORM 实现了POJO 和数据库表之间的映射,以及...

    ibatis教程

    iBatis是一个简单易用的、灵活的Java ORM工具包,iBatis执行效率非常高,接近于JDBC的代码的效率,因此iBatis适合做对数据性能要求很高的应用系统。 iBatis目前的最新版本是3.02,最稳定的版本是2.3.4,由于iBatis的...

    iBATIS技术教程PPT和代码.rar

    iBATIS是一种“半自动化”的ORM实现。 所谓“半自动”,可能理解上有点生涩。纵观目前主流的 ORM,无论 Hibernate 还是Apache OJB,都对数据库结构提供了较为完整的...“半自动化”的iBATIS,却刚好解决了这个问题。

    ibatis 开发指南

    “半自动化”的ibatis,却刚好解决了这个问题。 这里的“半自动化”,是相对Hibernate等提供了全面的数据库封装机制的“全自动化” ORM 实现而言,“全自动”ORM 实现了POJO 和数据库表之间的映射,以及...

    基于 Spring和 Memcached的 iBATIS二级 缓存的研究与应用 (2009年)

    高性能是J2EE应用程序追求的目标,在特定硬件基础上,数据...在对 iBATIS的缓存支持情况进行了介绍和研究的基础上,并结合Spring框架和iBATIS,使用Memcached对iBATIS二级缓存进行了新的实现,使应用的性能得到了很大的提升.

    框架性能分析

    比较了spring hibernate ibatis在dao层对数据操作的性能。

    JAVA高并发高性能高可用高扩展架构视频教程

    打造高效代码结构(java性能优化) 新版本通俗易懂_观察者模式递进时讲解 ibatis连接数据库 高并发之单(多)生产者消费者线程 高并发复用数据库链接技术详解之数据库连接池 类加载器的高级特性(自定义类加器实现加密...

    IBatisNet.DataMapper 之简单三层

    系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高度优化的SQL语句(或存储过程)才能达到系统性能设计指标。 2.iBATIS之于小型、简单系统:非常适用 iBATIS自己就很小并且简单 iBATIS不会对...

    IBatisNet完整项目源码(含数据库)

    系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高度优化的SQL语句(或存储过程)才能达到系统性能设计指标。 2.iBATIS之于小型、简单系统:非常适用 iBATIS自己就很小并且简单 iBATIS不会...

    数据库访问的性能问题与瓶颈问题

     场景  个别公司的技术决策者要求团队的开发人员在编写数据访问层的时候,禁止在程序中出现任何的SQL语句,禁止使用EntityLibrary,禁止使用NBear、NHibernate、IBatis、EntityFramework等ORM框架,只允许使用存

    AppFramework_V1.0

    <br> <br>下面三张表格罗列的测试数据,可以明显看出AppFramework数据库访问组件的性能全面超越了IBatisNet: <br> <br>表I –10并发20循环(数据库和测试机分开) <br>对比项目 iBatis2.0...

    AppFramework_V1.0_New

    720 1.59 <br>1.53 <br> <br> 表II –50并发4循环(数据库和测试机分开) <br>对比项目 iBatis2.0 <br>(毫秒) AppFramework <br>(毫秒) 后者前者性能对比 <br>(倍) ...

    图书管理系统SSH+ExtJs+Ms-SQL

    l 采用成熟技术开发 struts2 + spring2 5 + iBatis2 3 使系统具有较高的技术水平和较长的生命周期 l 系统尽可能简化图书馆管理员的重复工作 提高工作效率 l 简化数据查询 统计难度 ">图书馆管理系统是图书馆管理...

Global site tag (gtag.js) - Google Analytics