记录 jpa / jdbcTemplate 查询postgresql 高耗时问题的追踪处理

在Spring Boot后端应用中,使用JPA或JdbcTemplate查询PostgreSQL时遇到50秒的高延迟问题。虽然SQL在数据库控制台执行迅速,但在应用中却很慢。通过代码追踪,发现问题出在RowMapper的mapRow方法,平均每次耗时15-20毫秒。进一步分析发现,日志工具类在查询过程中执行了24万多次,导致近40秒的延迟。关闭该日志工具后,查询恢复正常。使用jProfiler等工具对性能分析和问题定位非常关键。
摘要由CSDN通过智能技术生成

在一次日常查询中,涉及到需要根据条件查询postgresql获取数据的流程,查询工具为jpa / jdbcTemplate, 在查询过程中发现很简单的一条sql 查询需要耗时接近50秒,而总数据量仅仅为1800 多条,且查询条件已经设置了索引(其实数据量小的情况下,索引效果不明显)。

        首先怀疑是否是sql本身的问题,但是单独把sql拿出来放到数据库控制台查询的话,发现速度很快,秒级就可以响应。但是最终为了验证,还是决定把关联查询分为多个表个字查询,然后合并结果,但是实际发现,每次查询到主表(主表数据1800+)的时候,查询速度就特别慢,接近30秒的时间响应。为了验证具体耗时步骤,开始追踪源码。

如图所示为jdbcTemplate 查询和处理数据的核心代码,其中 stmt.executeQuery(sql) 表示执行查询的动作, rse.extractData(rs) 表示将查询得到的resultSet中的数据转化到具体的接收对象中,转化过程主要通过RowMapper.mapRow 来实现。

 mapRow 的主要逻辑是通过反射创建一个对象,然后将绑定resultSet中的每一行row 数据绑定来返回(如BeanPropertyRowMapper&

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值