如何优化Hibernate的执行时间?

穆吉尔·卡西基扬

我有一个打包为 JAR 文件的 Spring Batch 应用程序,如下所示

java -Xms2048m -Xmx2048m -Ddivision=25 -Ddate= -Denv=dv -Dconn=45 -jar demo-jobs*.jar job-definition.xml jobName -next

我想优化整体执行时间,所以我试图跟踪所有方法的平均执行时间。我正在使用 Java 飞行记录器。

我看到以下 Hibernate 方法执行率很高

  1. org.hibernate.query.Query.getResultList()
  2. Org.hibernate.query.internal.AbstractProducedQuery.list()
  3. Org.hibernate.query.SessionImpl.executeUpdate(String, QueryParameters)

在此处输入图片说明

在此处输入图片说明

这是什么意思?我如何优化这个?

巴斯蒂安·詹森

这意味着大量时间花在运行 SQL 查询上,这在典型的 CRUD 应用程序中很常见。

Query.getResultList()涉及select查询和SessionImpl.executeUpdate()涉及updatedelete查询。

为了了解发生了什么,您必须找到执行了哪些查询。有很多方法可以做到这一点,但我最喜欢的两个是:

  • 您可以在 Hibernate 中记录 SQL 语句,这将为运行的每个查询生成一个日志。根据您的应用程序,这可能会记录大量查询,可能太多而没有任何用处。
  • 您可以使用像YourKit这样的分析器(一种商业产品,但它有 15 天的试用期,应该足以解决您的问题)。除了 CPU/内存分析,YourKit 还可以监控通过 JDBC 运行的查询它基本上会列出所有已执行的查询、每个查询的运行次数以及执行它们的方法。

获得所有执行的 SQL 查询的详细信息后,您必须检查它是否与您的应用程序应该执行的操作一致。

可能出现的问题:

  • N+1 查询
  • where子句中使用的列上缺少索引(请注意,某些数据库上不会自动索引外键)
  • 一个循环从某个配置表中取数据的过程,而不是一开始就取一次数据
  • ...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章