开发者社区 问答 正文

Spring Data Jpa并发用户请求性能下降

我使用Jmeter对应用程序进行了性能负载测试,发现我的其余get请求之一在并发用户请求负载100上的执行情况确实很差。我需要一些帮助来确定im是否做错了什么。让我对我的应用程序有一些见解。

技术堆栈 我的申请是在春天引导,休息,春天JPA的数据,甲骨文,Kubernetes(2个豆荚),阿光连接池(100,maxLifetime:30000,的idleTimeout:10000 maximumPoolSize)建成。对于简单的查询(查找),我使用spring数据jpa存储库,负载测试可以在类似的延迟下正常运行,但是对于复杂的查询(搜索),我将自定义存储库与带有自动连接的PersistenceContext的querydsl一起使用,负载测试确实很糟糕。

性能结果:

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

单次请求延迟 多个请求 如果我的理解是正确的,则对于100个并发请求,服务器将每个请求旋转一个线程,并且所有请求应在5秒钟内返回响应。但是所有线程都在存储层中被阻塞,同步运行,并且对于连续请求的等待时间正在增加。 多个请求 任何帮助将不胜感激,并让我知道是否需要进一步的信息。

示例查询: 我编写了一个视图,该视图可以进行所有联接,这是我正在运行的示例查询,没有任何过滤器。

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

展开
收起
垚tutu 2019-11-28 22:36:07 991 分享 版权
阿里云 AI 助理回答

面对您在使用JMeter进行性能负载测试时遇到的问题,这里有几个可能的优化方向和排查思路,结合您的技术栈(Spring Boot、REST、Spring JPA、Oracle数据库、Kubernetes、HikariCP连接池以及Querydsl)来分析:

1. 数据库查询优化

  • 索引调整:对于复杂的联接查询,确保涉及的表上有合适的索引。特别是对于排序(ORDER BY)和限制结果集(FETCH FIRST)的列,如variants_id,应有索引以加速查询。
  • 视图优化:如果频繁使用的视图非常复杂,考虑将其物化成一个实际的表,或者进一步优化视图定义,减少不必要的数据处理。
  • 查询重写:检查是否可以优化查询逻辑,比如避免全表扫描,减少JOIN的数量,或利用并行查询功能(如果Oracle支持且适合场景)。

2. Spring Data JPA与Querydsl

  • 分页查询:对于需要提取前N条记录的操作,直接使用Spring Data JPA的分页功能而非依赖于SQL层面的FETCH FIRST,这可能会更高效且易于管理。
  • Querydsl优化:确认Querydsl生成的SQL是否最优,有时候自定义SQL比ORM工具自动生成的更高效。同时,确保Querydsl查询中尽可能地延迟加载关联对象,避免无谓的数据加载。

3. HikariCP配置调优

  • 最大连接数:您提到的最大连接池大小为100,但请确保这个值是根据实际并发需求和数据库承受能力设定的。过大的连接池可能导致数据库资源耗尽。
  • 超时设置:检查maxLifetimeidleTimeout设置是否合理。长时间未关闭的连接可能导致资源泄露,而过短的超时可能导致频繁的连接创建销毁,增加开销。
  • 连接测试:启用HikariCP的连接测试功能,确保从池中获取的连接都是有效的,避免因无效连接导致的阻塞。

4. Kubernetes与应用部署

  • 资源限制:检查Kubernetes中的Pod资源配置(CPU、内存),确保应用有足够的资源运行,并监控Pods在高负载下的资源使用情况,适时调整。
  • 水平扩展:考虑在高并发场景下通过自动扩缩容策略增加Pod数量,分散请求压力。

5. 应用层面优化

  • 异步处理:对于耗时操作,考虑引入异步处理机制,将长任务放入消息队列中异步执行,快速响应前端请求。
  • 缓存策略:对于不经常变化的查询结果,实施适当的缓存策略,如Redis,减少对数据库的直接访问。

6. 监控与日志

  • 性能监控:使用APM工具(如Pinpoint、SkyWalking)监控应用及数据库的性能指标,定位瓶颈。
  • 日志分析:详细查看应用日志和数据库日志,了解请求处理流程中的耗时点。

综上所述,问题可能涉及多方面,建议从数据库查询优化、连接池配置、应用架构设计等角度综合排查和优化。希望这些建议能帮助您解决问题,如果需要更具体的帮助,请提供更多的日志信息或性能监控数据。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答