Hibernate是将Java Web应用程序与SQL数据库集成的好工具,但是当应用程序的响应时间开始显着增加时,我们应该怎么做? 当我们怀疑应用程序是否会随着客户群的增长而扩展时,我们该怎么办?

在花大价钱托管或重写代码之前,请考虑分析和改进Web应用程序的这7个方面。

#1调整JVM内存设置

JVM允许我们配置它将分配给运行我们的应用程序的内存量。 如果未正确配置内存设置(堆大小,perm gen大小等),则可能是垃圾回收进程运行得过于频繁,这将导致CPU使用率激增并停止执行。

#2优化JDBC数据源和Hibernate的配置

在这些配置中,我们可以定义Hibernate和底层JDBC层的一般行为。 在应用程序此部分中所做的更改(池大小,顺序等)可能会影响每个SQL查询和更新。 因此,正确设置这些设置对于您的应用程序的最佳性能至关重要。 在这里还值得一提的是Hibernate 2级缓存。 当应用程序一遍又一遍运行相同的查询时,缓存最多可以节省99%的数据库往返次数。 市场上有几种可以用作二级缓存提供程序的缓存框架,其中最著名的是EHCache , Oracle Coherence , Infinispan和Hazelcast 。

#3优化休眠映射

无论我们是使用批注还是XML文件来配置Hibernate映射,几行更改(延迟加载,批处理等)都可以大大提高应用程序的性能。 这些映射直接影响Hibernate将生成和执行哪些SQL语句。 在大多数情况下,使用默认映射配置可能效果很好,但是针对关键的SQL查询和更新对其进行优化可能会大大增加与数据库的往返次数以及执行所花费的实际时间。

#4优化Hibernate会话管理

在处理事务时,了解不同的隔离级别和传播类型以及将只读和读写DB操作拆分为单独的事务是关键。

#5添加缺少的数据库索引

有几种方法可以识别最耗费资源的SQL语句,但是一旦有了它们的列表,添加必要的索引就变得很简单。 没有这些索引,数据库可能必须逐行读取整个数据库表。 这是数据库中最耗费资源的操作之一,绝对是我们要避免的事情。

#6改善SQL语句

一些由Hibernate生成的SQL语句可能包含许多不必要的联接操作。 这是确保SQL语句爬网的一种可靠方法。 我们必须确保仅包含绝对必要的联接。 要记住的另一件事是如何组织WHERE条件来过滤结果集。 选择错误的顺序可能会使查询速度降低一个数量级。

#7重构Java代码

代码中最典型的问题之一是N + 1查询问题,我们运行查询以获取项目列表,然后遍历这些项目以对每个项目运行单独的查询。 单独使用这种反模式可以终止大多数扩展应用程序的尝试,并且可能使我们在托管方面付出巨大的代价。 由于其修复需要代码重构 ,因此它是最复杂,最昂贵的性能问题之一。

摘要

当所有尝试似乎都无法解决性能问题时,仍然存在希望。 上述项目可能有助于在主要瓶颈升级为更大的问题之前对其进行识别。 哪些性能问题正在损害您的业务?

翻译自: https://www.javacodegeeks.com/2015/08/7-ways-to-improve-performance-of-a-hibernate-application.html

改善Hibernate应用程序性能的7种方法相关推荐

  1. hibernate性能_改善Hibernate应用程序性能的7种方法

    hibernate性能 Hibernate是将Java Web应用程序与SQL数据库集成的好工具,但是当应用程序的响应时间开始显着增加时,我们应该怎么做? 当我们怀疑应用程序是否会随着客户群的增长而扩 ...

  2. 改善WPF应用程序性能的10大方法(转)

    细数改善WPF应用程序性能的10大方法 2010年11月16日00:05 it168网站原创  作者:IT168 黄永兵  编辑:胡铭娅 评论:0条 本文Tag: ASP.NET WPF .NET   ...

  3. 细数改善WPF应用程序性能的10大方法

    WPF(Windows Presentation Foundation)应用程序在没有图形加速设备的机器上运行速度很慢是个公开的秘密,给用户的感觉是它太吃资源了,WPF程序的性能和硬件确实有很大的关系 ...

  4. 详解优化iOS程序性能的25个方法

    本篇文章主要介绍了优化iOS程序性能的25个方法,感兴趣的小伙伴们可以参考一下 1. 用ARC管理内存 ARC(Automatic ReferenceCounting, 自动引用计数)和iOS5一起发 ...

  5. 成为优秀程序员的8种方法

    成为优秀程序员的8种方法 是时候认真对待如何提高你的编程技能了.让我们开始吧! "成为一个牛逼的程序员"是一个看似很容易实现的职业生涯改进目标,但其实这并非是一个简单的目标.一方面 ...

  6. 提升PHP性能的21种方法

    提升PHP性能的21种方法. 1.用单引号来包含字符串要比双引号来包含字符串更快一些.因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会. 2.如果能将类的方法定义成static,就尽量定义成s ...

  7. python记录程序运行时间的三种方法

    这里提供了python记录程序运行时间的三种方法,并附有实现代码,最后进行比较,大家参考下: 方法1 import datetime starttime = datetime.datetime.now ...

  8. 测试显卡性能的两种方法

    测试显卡性能的两种方法: 方法一:利用软件包unixbench-5.1.2 用unixbench-5.1.2,需要网上下载相关源码包,并提前需要修改Makefile: GL_LIBS = -lGL - ...

  9. 关于ssh框架中hibernate扫描实体类的两种方法annotatedClasses和packagesToScan

    [Hibernate]spring整合hibernate扫描实体类的两种方法annotatedClasses和packagesToScan的异同

最新文章

  1. R语言使用beanplot包绘制豆荚图实战:与箱图、小提琴图对比、绘制不对称的豆荚图
  2. 疲劳容器的定义_疲劳分析基础
  3. NYOJ541 最强DE 战斗力(第五届省赛试题)
  4. 循环队列及C语言实现二
  5. 【曼彻斯特编码/差分曼彻斯特编码】
  6. 编写安全的代码-程序员头顶的达摩克利斯之剑
  7. 不小心发现谷歌 Firebase 消息服务的漏洞,获奖3万+美元
  8. python计算器gui设计_python 实现简单的计算器(gui界面)
  9. css模拟title和alt的提示效果[转]
  10. 图像处理-绘制直方图
  11. si4463如何读取RSSI
  12. 付费推广的投入产出比达到多少才合理?
  13. Mybatis Plus 3.1.1 lambda 表达式查询时异常 cannot find the corresponding database column name!
  14. 清华大学、北京大学毕业生的去向
  15. python学后总结_学员 | 斥巨资学完数据分析后,给大家总结了7个小建议
  16. 歌评 Mondstadt Starlit 星光下的蒙德-陈致逸
  17. 【相机】工业相机必看的六大参数
  18. java.lang.IllegalArgumentException介绍
  19. 练习三:利用条件语句实现计数分频时序电路
  20. 打通NI LabVIEW与飞桨工具链,百度携手NI探索工业硬科技新方向

热门文章

  1. idea中报错……的解决方式!
  2. android下raw目录的作用,Android 之 assets目录和raw目录
  3. 雨滴桌面时间插件_Win10美化向——如何搭配你的桌面
  4. spring的PathMatchingResourcePatternResolver基于ant通配符匹配路径遍历项目所有xml文件
  5. 本地方法(JNI)——访问数组元素+错误处理
  6. kafka 发布-订阅模式_使用Apache Kafka作为消息系统的发布-订阅通信中的微服务,并通过集成测试进行了验证...
  7. selenium 4_Selenium4 Alpha –期望什么?
  8. aws 删除ec2实例_如何在AWS中启动EC2实例
  9. jdk8 string::_JDK 12的String :: transform方法的简要但复杂的历史
  10. Neo4j导入:java.lang.IllegalStateException:不支持在单个导入中混合指定和未指定的组所有物...