java - 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.
解决方案
推荐阅读
- scala - 如何将ScalaFX根转换为图像,然后将其保存在本地
- javascript - React 中的数组操作
- javascript - 可以在 font-awesome-react 中添加自定义图标吗
- django - 如何在 django orm 中使用不区分大小写的操作?
- pytest - 沙盒中的 Bazel 和 py_test - 有什么方法可以定义输出?
- python-3.x - 如果在 Pandas 中读取 csv 文件时发生错误标记数据错误,如何跳过文件
- javascript - 如何在javascript中本地保存树视图节点
- javascript - 尝试通过使用javascript单击图像来设置图像的不透明度,但不断出现错误
- angular - 谷歌地图地方请求只返回一个地方
- amazon-web-services - 使用 cloudFormation 将角色附加到现有 EC2 实例