0

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

对于使用 Spring JPA 的 DB 连接和使用分页的 findAll() 方法,当我在 DB(3.3GB) 中有大约 1000 万条记录时,每页 20 条记录需要将近 3.5 秒(添加索引之后,在 7.5 秒之前)。如果我从 pgsql cli 执行相同类型的查询

slelect * from myTable order by column1 limit 20;

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

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

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

4

1 回答 1

0

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

于 2021-10-26T08:19:43.197 回答