关于Mysql + Hibernate (JPA)高并发的性能问题

最近在做系统性能调优的问题。大家帮我分析一下可能的瓶颈吧?谢谢各位了。
[b]先说一下我的测试环境:[/b]
App Server: Window 2008 Server + Tomcat 6 , 4 cpu core, 8G mem, 500Mbps, 最大连接4000,Accept 4000, 用了 APR connector。Heap Size 4G
DB Server: Window 2008 Server + Mysql 5.5, 4 cpu core, 8G mem, 500Mbps, 最大并发连接 1000, innodb, buffer pool 4G
JMeter client: Window 2008 Server + JMeter 5.1, 4 cpu core, 8G mem, 500Mbps
也许大家会建议我用Linux系统,我知道那样肯定会好一点。但是没有办法,公司就要求这样的平台。
[b]然后就是我的应用:[/b]
Spring MVC + Resteasy + HIbernate (JPA) + DBCP (连接池500) + 30多张表 
[b]看看我的Test Case:[/b]
用JMeter录制了用户访问我的应用的大多数功能。
并发数为1000, ramp-up时间为1000s,因为我的一个线程执行时间也差不多是1000s。所以用JMeter看下来可以达到1000个实际并发用户。case中80%的insert。插入的是30张不同的表。关联很少。我的调用都是rest服务调用。
[b]测试结果[/b]
访问数据库的service响应时间相当慢,在并发数上升到100的时候相应还挺快,大概500毫秒,一旦并发达到800的时候,相应时间可以达到30s。
[b]我的Monitor情况[/b]
App Server 和 DB Server的cpu都是小于10%,内存都只用了1G多,我配置了4G。
用YourKIT看下来的结果,有大量线程都block在了MySQLIO的read。是在block在prepareStatement的jdbc操作上。

请各位给点建议吧。谢谢

0

2个回答

软件设备上:
1.给hibernate配置上一级和二级缓存
2.给数据库中相关表的字段建立索引
3.优化相关的查询语句

在硬件上:
1.提高机器的配置
2.把数据库和运行环境分离到两个服务器上。
3.把用户常常访问的数据进行水平切割到多张表中。

访问速度问题会随着访问量的增加会越来越慢,你要找到导致这样问题的瓶颈。不断的去优化它,只考虑节约硬件成本是不行的。

0

hibernate使用缓存了没有呢

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
在JPA中实现离线悲观锁
JPA规范并没有涉及悲观锁,如有需要,可以参考下面代码实现: [b]在数据库中准备一张lock表[/b] ,[b]用户通过页面锁定某个entity时[/b] java app向lock表插入一条记录,包含该entity实例的标识(如主键),该entity类型的标识(比如表的名字或实体Bean对应的java类的全路径名),锁定时间等。 如果java app发现lock...
关于Mysql + Hibernate (JPA)高并发的性能问题
最近在做系统性能调优的问题。大家帮我分析一下可能的瓶颈吧?谢谢各位了。rn[b]先说一下我的测试环境:[/b]rnApp Server: Window 2008 Server + Tomcat 6 , 4 cpu core, 8G mem, 500Mbps, 最大连接4000,Accept 4000, 用了 APR connector。Heap Size 4GrnDB Server: Window 2008 Server + Mysql 5.5, 4 cpu core, 8G mem, 500Mbps, 最大并发连接 1000, innodb, buffer pool 4GrnJMeter client: Window 2008 Server + JMeter 5.1, 4 cpu core, 8G mem, 500Mbpsrn也许大家会建议我用Linux系统,我知道那样肯定会好一点。但是没有办法,公司就要求这样的平台。rn[b]然后就是我的应用:[/b]rnSpring MVC + Resteasy + HIbernate (JPA) + DBCP (连接池500) + 30多张表 rn[b]看看我的Test Case:[/b]rn用JMeter录制了用户访问我的应用的大多数功能。rn并发数为1000, ramp-up时间为1000s,因为我的一个线程执行时间也差不多是1000s。所以用JMeter看下来可以达到1000个实际并发用户。case中80%的insert。插入的是30张不同的表。关联很少。我的调用都是rest服务调用。rn[b]测试结果[/b]rn访问数据库的service响应时间相当慢,在并发数上升到100的时候相应还挺快,大概500毫秒,一旦并发达到800的时候,相应时间可以达到30s。rn[b]我的Monitor情况[/b]rnApp Server 和 DB Server的cpu都是小于10%,内存都只用了1G多,我配置了4G。rn用YourKIT看下来的结果,有大量线程都block在了MySQLIO的read。是在block在prepareStatement的jdbc操作上。rnrn请各位给点建议吧。谢谢rnrnrn
步步为营Hibernate全攻略(五)Hibernate解决高并发问题之:悲观锁 VS 乐观锁
高并发问题是程序设计所必须要解决的问题,解决此类问题最主要的途径就是对对程序进行加锁控制。Hibernate对加锁机制同样做出了实现,常用加锁方式为悲观锁和乐观锁。悲观锁指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态,通常是由数据库机制实现的,在整个过程中把数据锁住(查询时),只要事务不释放(提交或者回滚)任何用户都不能查看或修改。
评测:讨论Hibernate与myBatis的性能差异
前言 由于编程思想与数据库的设计模式不同,生出了一些ORM框架。 核心都是将关系型数据库和数据转成对象型。当前流行的方案有Hibernate与myBatis。 两者各有优劣。竞争激烈,其中一个比较重要的考虑的地方就是性能。 因此笔者通过各种实验,测出两个在相同情景下的性能相关的指数,供大家参考。   测试目标 以下测试需要确定几点内容: 性能差异的场景; 性能不在同场景下差异...
Hibernate 插入海量数据时的性能 与 Jdbc 的比较
[size=medium]系统环境:[/size] [img]http://dl.iteye.com/upload/attachment/220711/9bef669a-3c62-33fd-badc-95465bdc8e0e.jpg[/img] [size=medium]MySQL 数据库环境: [/size] [code="Dos"]mysql> select version(...
解决SpringBoot2.0中的Hibernate针对MySQL5.7方言问题
参考: mysql更改引擎(InnoDB,MyISAM)的方法_Mysql_脚本之家 https://www.jb51.net/article/57132.htm 该连接中提到mysql默认的数据库引擎是MyISAM,不支持事务和外键,也可使用支持事务和外键的InnoDB。 实际我通过HeidiSQL尝试,mysql5.7 默认使用的是 InnoDB, 查看MySQL配置文件my.ini配置...
jpa实现测试报告openjpa性能令人发指,Hibernate表现可圈可点
一直对jpa怀有好感,以前也是用hibernate做jpa的实现产品,运行起来也相当不错, 最近换成openjpa做jpa的实现,突发奇想的对openjpa做了一下测试,没有想到openjpa的性能那么差劲,运行时间一般是hibernate实现jpa的3-8倍,恐怖! 下面是jpa查询结果的代码 ,同样还做了一部份关于关于Hibernate-jpa和openjpa增删改的性能测试,由于代码多...
OpenJPA与Hibernate实现JPA的性能测试
项目移植到OpenJPA后一直使用都很不错,最近看了http://www.iteye.com/topic/777470受到一些启发,基于自己的项目也做了一下测试。   1、测试代码: long t1 = System.currentTimeMillis(); qtServ.test(); long t2 = System.currentTimeMillis(); ...
mysql高并发下主键冲突
事情是这样的,博主刚刚写完一个小项目,由于使用的量比较大,所以做了一下压测,在插入数据的时候报出了如下错误 :[http-bio-****-exec-67] DEBUG c.j.m.a.d.A.insertAppUser!selectKey - ==> Parameters: org.springframework.dao.DuplicateKeyException: ### Error u...
数据库(Hibernate)事务与并发问题处理(乐观锁与悲观锁)
目录 一、数据库事务的定义 二、数据库事务并发可能带来的问题 三、数据库事务隔离级别 四、使用Hibernate设置数据库隔离级别 五、使用悲观锁解决事务并发问题 六、使用乐观锁解决事务并发问题     Hibernate事务与并发问题处理(乐观锁与悲观锁) 一、数据库事务的定义   数据库事务(Database Transaction)
JPA/hibernate懒加载原理分析及JSON格式API反序列化时连环触发懒加载问题的解决
       什么是懒加载        JPA是java持久层的API,也就是java官方提供的一个ORM框架,Spring data jpa是spring基于hibernate开发的一个JPA框架。Spring data jpa提供了大量的数据库操作接口,以及采用动态代理的方式做的以接口方法命名的数据库操作方式,大大简化了开发人员对数据库操作的代码。它对于简单的查询操作非常简便,但是一旦涉及...
hibernate支持中文排序(mysql)
mysql 数据库中 原生态sql语句 查询且按中文排序: sql: select * from table order by convert(field using gbk )   asc or desc  ; 说明:table是表名、field是字段名 、gbk是编码格式、 而用hibernate使用以上的语句会报错误 using 貌似是关键语句、不能使用
hibernate4性能之并发和锁机制
数据库事务的定义 数据库事务(Database Transaction),是指作为单个逻辑工作单元执行的一系列操作。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。 ● 原子性(atomic),事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行 ● 一致性(consistent),事务在完成时,必须使所有的数据都保持一致状态。 ●
JPA/Hibernate:基于版本的乐观锁并发控制
比方说,我们有一个系统由多个用户使用,其中每个实体可以被多个用户修改。我们希望避免这种情况:两个人的加载一些信息,基于他们所看到的做出一些决定,然后在相同的时间。更新状态,我们不让让后一个用户覆盖前面一个用户做出的修改。   它也可以发生在服务器环境 - 多个事务可以修改共享的实体: 事务1加载数据 事务2更新数据,并确认 事务1基于第一步加载的数据(不是当前最新数据,最新数据已经被事务2...
Hibernate连接MySql5.7的部分问题
先把解决问题的代码丢出来一下 src\test\resources\hibernate.cfg.xml <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN...
JPA使用乐观锁应对高并发
高并发系统的挑战在部署分布式系统时,我们通常把多个微服务部署在内网集群中,再用API网关聚合起来对外提供。为了做负载均衡,通常会对每个微服务都启动多个运行实例,通过注册中心去调用。那么问题来了,因为有多个实例运行都是同一个应用,虽然微服务网关会把每一个请求只转发给一个实例,但当面对高并发时,但它们仍然可能同时操作同一个数据库表,这会不会引发什么问题呢?悲观锁的问题比如电商中常见的商品秒杀系统,在用户
[JavaEE - JPA] 性能优化: 如何定位性能问题
要想解决性能问题,首先得要有办法定位问题。而JPA的性能问题,可以说99%都是因为JPA Provider(一般使用的都是Hibernate,或者EclipseLink)生成的SQL效率低下或者生成并执行了你意料之外的SQL。针对这个问题,其实不需要多么复杂的调试工具,一般而言JPA Provider就会提供一些基础的性能分析工具,以Hibernate为例(EclipseLink等其它JPA Pro
JPA面试常见问题
<br />这篇文章是摘自Patrick Linskey的一篇文章,主要是关于JPA相关内容的问答,相信JPA面试会碰到很多这里面的问题<br />问题:EJB专家团队是如何摆脱事务描述符的?<br />回答:在会话bean和消息驱动bean中,可以通过描述符和注释来控制事务的行为。此外,我们将默认的事务属性更改为“REQUIRED”,这个默认值比以前的值“SUPPORTS”更常用。因此,完全不必为业务方法配置事务行为。<br />JPA实体仅供本地使用,重点关注域模型。因此,无法在JPA实体上配置事务性(
mysql版本导致的hibernate 方言问题
从今年年初就打算写属于自己的博客,但是总觉得自己这个菜鸟水平不够,也就没写。马上2016年就要结束了,所以写下这篇博客也算是对自己这几个月自学后台开发的总结吧!第一次写肯定有很多不足的地方,不足之处请大家留言指明! 今天在看hibernate视频时,看到视频上人家的hibernate.cfg.xml配置文件在配置hibernate方言时,发现视频上是这样写的<property name="d
hibernate学习笔记5---实体类或属性名与数据库关键字冲突、hql命名参数、hql实现通用分页
一、实体类或属性名与数据库关键字冲突问题 1、实体类名与数据库中的关键字冲突 比如:实体表User与oracle中的系统表冲突 解决方式1:在xml中添加table属性,指定表名,使其不与name默认相等 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
Hibernate性能优化的常用措施
有关hibernate的性能优化,此前也写过一篇帖子使用Hibernate进行大数据量的性能测试 后来发现老外有篇文章总结也挺好的 Revving Up Your Hibernate Engine 仅供参考,翻译如下:   Hibernate是笔者使用了超过5年的优秀ORM框架,虽然说使用了5年,但笔者并没有把握说自己真正意义上的精通Hibernate。说道熟悉Hibernate还差不多
持久层 技术选型如何决策?JPA,Hibernate,ibatis(mybatis)
转自:http://t.51jdy.cn/thread-259-1-1.html 持久层 是一个项目 后台 最重要的部分。他直接 决定了 数据读写的性能,业务编写的复杂度,数据结构(对象结构)等问题。 因此 架构师在考虑 使用那个持久层框架的时候 要考虑清楚。 选择的 标准: 1,项目的场景。 2,团队的技能掌握情况。 3,开发周期(开发效率)。 传统的 业务系统,通常业务都比较
Spring-boot+JPA+Hibernate项目修改数据库MySQL为Oracle出现的问题
从Github上fork一个论坛项目,原本数据库用的MySQL,本地项目使用的Oracle。修改过程和出现的几个问题,做一下记录。1.第一步当然是修改maven的POM依赖,删除MySQL的依赖,加入oracle的依赖。本地maven使用的阿里云的仓库,好像跟maven的中央仓库内容不是很一致,就是中央仓库有的,阿里库里没有。所以注意要跟阿里库一致。2.改完依赖,编译之后开始尝试启动项目。再启动项...
hibernate、springdatajpa等对于相同列的处理
这两天做项目,框架用的是spring-data-jpa,说白了,里面用的就是hibernate的东西。在查询时有一个表的主次关联查询,sql中有一个相同的列名。 当这个时候,你去执行entityManager.createNativeQuery得到query后,执行query.getResultSet 方法时,出现报错。报错的内容就是该列未找到,这时候看看hibernate内部的 处理方式,了
Hibernate的大数据量问题与性能优化分析
科多大数据小课堂之Hibernate的大数据量问题与性能优化分析。不要一味的为了hibernate而hibernate还是可以考虑SQLhibernate要做大量映射效率肯定不如纯的jdbc快这个只能说hibernate再这个方面和ibatis比还有一定差距数据量大可以解决,现在我准备采用分表的方式。每个月建一张表,Hibernate动态生成表有什么好的解...
Hibernate的flush效率问题
  程序中使用了声明式事务管理,所有service中以add打头的配置是PROPAGATION_NOT_SUPPORTED,每个请求过来产生100个更新,当service处理完毕后,hibernate会把数据刷新到数据库,这个刷新的过程非常消耗时间。偶然间把事务的传播属性改成了PROPAGATION_REQUIRED,刷新到数据库的速度反而快了。暂时不知道为什么。。。   APPAREN...
hibernate5.2+ 时区少8小时问题
问题描述,以前自己使用的版本是5.0+的,基本没有所谓的时区问题,后台新的项目使用LocalDateTime的时候,在封装spring-data-jpa高级查询的时候,between两时间一直不对,找了很久,发现是查询出来的数据跟理想的不一样,找到是时区的问题:解决方案 在连接url增加时区设置参数就OK了 jdbc:mysql://localhost/dounine?createDatabas
Spring JPA使用时,提高程序运行效率的几个点总结
1, 在删除操作时,最好不要用jpa,直接在dao方法上@query,也就是用sql语句,能快些:jpa实现删除需要@transaction注解,该注解有可能造成tomcat出问题。。而且改成@query可以提升速度 2,sql中去掉trim 改java实现 在@query里的sql语句中,避免出现类似于trim(c.brokerAccount) ,需要补全参数时用java代码String.f
Hibernate 映射数据库中Json字段的解决方案
最近的项目ORM框架使用的是Hibernate,数据库使用PostgreSQL,俩个都是开源的高大上产品,Hibernate就不用说啦,主流的ORM框架,PostgreSQL第一次接触,其中包含Json数据类型的字段,这种类型意味着它可以像非关系型数据库那样存储数据,数据扩展性非常好,这也是项目使用它的主要原因之一。 在Hibernate和PostgreSQL的结合过程中遇到了针对Json数据
智能一代云平台(二十二):多租户方案比较Hibernate、EclipseLink、Mybatis+Mycat
分享一个大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!http://www.captainbed.net/zhanghan 【前言】 我们做的高校云平台中需要用多租户这种技术,目录了解到的有三种技术可以实现:符合JPA规范的Hibernate和EclipseLink以及Mybatis+Mycat;我们的上一版本的系统用的是EclipseL...
JPA, hibernate, jdbcTemplate(建议使用)区别
Hibernate批量处理海量其实从性能上考虑,它是很不可取的,浪费了很大的内存。从它的机制上讲,Hibernate它是先把符合条件的数据查出来,放到内存当中,然后再进行操作。实际使用下来性能非常不理想. spring jdbctemplate和hibernate在处理简单查询操作时,效率基本相同,甚至hibernate的效率要略高一些。但是在执行批量操作,繁琐操作时,hibernate的效
并发锁事务重试机制(JPA高并发下的乐观锁异常)
          我的博文中,有一篇短文Java结合Junit做并发测试用例,是介绍JPA在高并发下,多个Service方法更新 同一个记录;在异常信息中有StaleObjectStateException和ObjectOptimisticLockingFailureException异常信 息。有些业务这种靠JPA维护的版本信息是可行的,如果两个不同用户同事(高并发)购买一件马丁靴鞋...
[JavaEE - JPA] 性能优化: 4种触发懒加载的方式
在一个JPA应用中,可以通过懒加载来提高应用的性能。这一点毋庸置疑,但是懒加载不等于不加载,在某个时刻还是需要加载这些数据的,那么如何触发这个加载的行为才能够事半功倍呢?这里我想说一点题外话,面试的时候我也会考察被面试者对于JPA/Hibernate的看法,得到的答复通常都包含了对JPA/Hibernate的一些”鄙夷”,比如JPA/Hibernate性能太菜了,现在主流的持久层框架是MyBatis
springboot+druid+jpa(hibernate)+mysql项目案例
这案例是spring boot+druid+jpa(hibernate)+mysql搭建的maven结构的基础案例
Hibernate注解操作MySQL的Text类型字段
       使用如下注解,即可以正常保存和更新!         @Lob @Basic(fetch = FetchType.LAZY) @Type(type=&quot;text&quot;) @Column(name=&quot;PROFILE&quot;, nullable=true) public String getProfile() { return profile; ...
springboot jpa 非hibernate和mysql对应字段如何处理
    背景:程序中的entity对象中字段expression为json字符串字段,每次前端传过来的json对象进行转换会时出现错误,由于expression被转换为了JsonObject类型导致。     经过多方参考测试,jpa和数据库类型可以通过实现接口AttributeConverter&amp;lt;X,Y&amp;gt;实现该功能。 import com.google.gson.Gson; i...
jackson关于json序列化与hibernate懒加载冲突
一开始用jpa加上jackson自动转换对象为json数据 前台用vue觉得很方便然后做分页的时候,发现查询一个对象,会这个对象关联的表都查询一遍,这样就会太慢,然后关联表也会出问题。网上看了一些方法 把OneToMany对象设置懒加载 把ManyToOn对象设置EAGER 然后我返回对象的时候发现还是查询了一对多的表比如客户表下面有OneToMany对应的联系人表 和 OneToMany对应的合...
Hibernate | Spring JPA | MySQL 使用过程遇到的一些问题
1. 使用过程 2. 背景 3. 遇到问题 3.1 不指定Hibernate数据库方言,默认SQL生成方式 3.2 抛出异常Hibernate加入了@Transactional事务不会回滚 3.3 Hibernate使用Spring Test测试加入了@Transactional事务无论如何数据库插入不成功 3.4 Hibernate在使用MyISAM引擎也可以回滚? 3.5 Hibernat...
Hibernate 自动生成bo 映射是 default_schema 引发的问题
最近在做一个项目,使用Spring+Struts2+JPA(Hibernate)的框架,项目接近尾声,现在要为测试和以后的正式运营开始做准备了。但是突然发现了一个小问题,发现使用MyEclipse自动生成的持久化对象所对应的Schema信息都是直接在类内部使用注解声明的方式来设置的,类似如下的格式@Table(name = "xxx", schema="xxx")。 这样子就带来一个坏处,就是数
Springboot2.0中Hibernate默认创建的mysql表为myisam引擎问题
升级到Springboot2.0后,依然是使用jpa、Hibernate来操作mysql,发现Hibernate默认创建的表是myisam引擎,而不是innodb。添加下面的方言即可修改为innodbspring: jpa: database: mysql show-sql: true hibernate: ddl-auto: update na...
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 关于大数据培训 关于云计算