【问题标题】:Spring JPA Crud Repository findAll() performacne improvementSpring JPA Crudrepository findAll() 性能改进
【发布时间】:2021-10-25 16:27:05
【问题描述】:

在我的项目中,我在 postgres 数据库的一个表中存储了大量行(约 3 亿条记录)。一行包含 77 列,其中包含字符串、整数类型,很少有布尔值和日期。我的问题是,当我尝试在 GUI 上浏览记录时,即使我的数据库仅包含其最终容量的 3%,它的运行速度也非常慢。

对于使用 Spring JPA 的 DB 连接和带有分页的 findAll() 方法,当我在 DB(3.3国标)。 如果我从 pgsql cli 执行相同类型的查询

slelect * from myTable order by column1 limit 20;

我立即得到相同的结果集,因此 postgres 性能没有问题。 使用本机查询覆盖 findAll() 的默认实现将时间减少到大约 2.8 秒,这仍然很长,我也尝试仅使用包含 77 列中的 6 列的视图来获取少数社区,但它并没有太大变化。

有什么建议可以在哪里查看或如何提高性能,以使此应用程序仍可用于包含 30 倍以上记录的数据库?

附:应用程序只不过是用于浏览这些记录的 GUI,此外每 15 分钟插入约 50K 的新记录。我的虚拟机分配了 8 个 vCPU 和 12GB 的 RAM。

【问题讨论】:

  • 我通常处理类似的表格,分页调用3秒是不正常的。如果您需要进一步的帮助,您将不得不分享一些代码和表格 DDL(包括索引)。

标签: postgresql performance spring-data-jpa crud-repository


【解决方案1】:

我想我找到了导致这种延迟的原因,它是 count() 方法。使用模拟计数,findAll() 第一次查询大约需要 300 毫秒,所有后续查询大约需要 12-20 毫秒。

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2017-07-04
  • 1970-01-01
  • 2015-10-31
  • 2018-11-25
  • 1970-01-01
  • 2018-05-12
  • 1970-01-01
  • 2018-08-15
  • 1970-01-01
相关资源
最近更新 更多