【发布时间】:2018-09-05 21:02:14
【问题描述】:
我最近设法在 VPS 上部署了一个 Spring Boot 项目。当我的机器上几乎立即运行的选择查询减慢到爬行速度时,我感到非常惊讶。我知道它会慢一些,只是没想到这么多。
我创建了一个重现该问题的测试项目。它从包含 100 000 行的表中选择大约 20 000 行。创建查询大约需要 100 微秒,运行查询大约需要 0.5-2 秒。我尝试使用 10 倍以上的行进行测试,但花费的时间比这要长得多,最终抛出了 OutOfMemoryError。
我四处搜索,似乎不应该花这么长时间,特别是因为在我看来数据并不多。我阅读并了解了索引,但即使是一个应该是索引使用的好例子的查询也需要很多时间。直接在psql 控制台中运行查询大约需要 100 毫秒(没有索引)和 20 毫秒。
如果您想对其进行测试,请下载server 和client 项目并按照那里的说明进行操作。我从我的真实项目开始,尽可能多地删除了一些东西,但留下了相似之处,以便进行比较。
我的 VPS 规格:
2×2,4 GHz CPU
2 GB 内存
uname -a
Linux ampix 2.6.32-042stab127.2 #1 SMP Thu Jan 4 16:41:44 MSK 2018 x86_64 GNU/Linux
Debian 杰西
Java 8 x64
PostgreSQL 9.4
Spring Boot 2.0.1.RELEASE
提前致谢。
更新 1:忘记写 Spring 之外的测试,忘记了我在选择条件中使用 0,8 而不是 0,9,所以选择的行数大于我的最初写的。
更新 2:使用返回 Stream<> 的派生查询将性能提高了可以忽略不计的数量。
【问题讨论】:
标签: postgresql spring-boot spring-data-jpa