我正在做“for循环”,其中我通过rest api端点调用另一个服务,该端点向数据库发送请求以获取数据并将其返回到我的服务。
在 9 个请求之后,第 10 个请求变慢了很多 - 从 1 秒到 30-40 秒(90% 的情况下是第 10 个请求。有时是另一个请求)。例如,11 - 17 个请求速度非常慢,然后接下来的 9 个请求速度很快。然后速度减慢,这种情况一遍又一遍地发生。
我意识到,当我从查询中删除“like 'text%'”条件时,或者当我例如:在 for 循环中放置断点 -> 传递 8 个请求 -> 中断与数据库的连接 -> 重新连接到数据库 -> 时,问题就消失了通过接下来的 8 个请求 -> 断开连接 -> 重新连接 -> 重复 x 次
我不知道这里出了什么问题。有什么想法吗?
我想补充一点,我正在使用带有 hiberante 和 hikari 的 spring boot 来处理与数据库的连接以及我使用 WebClient 的服务之间的通信。
我可以推测您可以在以下地方进行检查:
LIKE 'text%'
情况可能是导致性能缓慢的原因。这样的过滤条件依赖于有效的索引。
如果您的表在 Postgres 端建立索引,那么应用过滤器时您的数据库表可能很大。带有
LIKE
子句的查询可能会变慢,因为它们需要扫描大量数据。
如果还涉及任何缓存,则在一定数量的请求后可能会出现问题。
此外,顺便说一句,您能否详细说明是否设置了可提高性能的 Hikari CP 属性 (
maximum-pool-size
)。有时减少该数量也可以提高性能。