首页 > 解决方案 > Spring Data Jpa 并发用户请求性能命中

问题描述

我使用 Jmeter 对我的应用程序进行了性能负载测试,发现我的其余 get 请求之一在并发用户请求负载为 100 时表现非常糟糕。我需要一些帮助来确定我是否做错了什么。让我对我的应用程序提供一些见解。

技术栈 我的应用程序基于 Spring Boot、Rest、Spring Data JPA、Oracle、Kubernetes(2 个 pod)、Hikari 连接池(maximumPoolSize:100,maxLifetime:30000,idleTimeout:10000)构建。对于简单的查询(查找),我使用 spring data jpa 存储库,负载测试运行良好,延迟相似,但对于复杂的查询(搜索),我使用带有自动连接 PersistenceContext 的 querydsl 的自定义存储库,负载测试非常糟糕。

性能结果:

单个请求 一个请求大约需要 5 秒。它是一个复杂的连接查询,在 300 万条记录中进行搜索,过滤 30 万条记录并获取前 20 条记录。

单个请求延迟 多个请求 如果我的理解是正确的,在 100 个并发请求上,服务器每个请求启动一个线程,所有请求应该在 5 秒内返回响应。但是所有线程都在存储库层中被阻塞,同步运行并且连续请求的延迟正在增加。 多个请求 任何帮助将不胜感激,如果需要更多信息,请告诉我。

示例查询: 我编写了一个执行所有连接的视图,这是我在没有任何过滤器的情况下运行的示例查询。

select * from variants_view order by variants_id asc fetch first 20 rows only.

标签: javaspring-bootoracle11gspring-data-jpaquerydsl

解决方案


推荐阅读