接口响应时长几十秒问题排查以及解决

目录

背景

解决方案

总结


背景

线上系统运行几年后,被项目上提bug,有些接口响应很慢,加载页面要几十秒

解决方案

1、步骤一,加索引

性能优化成本高,需要开发周期,临时方案先分析慢sql,通过增加索引临时解决

效果: 增加索引之后,见效甚微。问题未解决

2、步骤二,分析查询性能

排查sql执行时间,定位是不是mysql服务器问题

mysql查询数据表,总数50w,单sql查询2秒。 mysql没有问题。问题未解决

3、步骤三,导出线上库重现问题

在本地开发库,接口都很快,1秒以内。所以为了重现问题,导出线上数据库表,本地重现以及分析代码。把线上库导入到本地库,执行之后,模拟用户参数,发现接口确实很慢,要几十秒。

找到接口代码,进行分析。发现存在循环,按每查询一次2秒,循环几十次,时间确实吓人

4、步骤四,修改问题

把单个循环查询,改成批量查询。接口就只用查2次数据库,时间控制在5秒

5、步骤五,加缓存(可不做)

如果5秒,还不能满足。可以考虑加缓存,数据查询之后,把数据放入redis缓存,设置缓存过期策略。

总结

接口性能差,可以通过下面几个方面进行优化:

1、分析mysql,加索引

2、清理数据表垃圾数据,减少数据量

3、分析代码,循环多次查数据表,优化成批量查数据表

4、循环多次写数据,改成批量写数据

5、以上都不能满足,考虑加缓存

6、如果数据表数据量达到千万,考虑历史数据保存到es,非历史数据存mysql的方案。进行分库分表等处理

相关推荐
CoderYanger4 小时前
Java EE 进阶:8.MyBatis 操作数据库(入门)(第二弹)
java·数据库·spring boot·spring·面试·java-ee·mybatis
CQU_JIAKE6 小时前
11.7[高体】
java·后端·spring
apcipot_rain7 小时前
C++转Java日记(04)
java·开发语言·c++
特立独行的猫A8 小时前
我给女儿写了个打字练习:一边敲键盘,一边把小学英语单词记牢
java·后端·python
憧憬成为java架构高手的小白9 小时前
LangGraph4j 实战(下)
java
天诰10 小时前
SA-K-11 检索会消失吗与四个未解问题
java·服务器·人工智能·python·机器学习·ai编程
这个昵称不容易13 小时前
SpringBoot「衣依」服装销售平台:144个Java文件180个接口,从挑衣服到收货评价整条链路都在
java·springboot·毕设
计算机毕设定制辅导-无忧学长14 小时前
《基于微信小程序的居家医疗陪护预约系统设计与实现》
java·spring boot·微信小程序·uniapp·居家医疗陪护预约系统
文丑颜不良啊15 小时前
LeetCode2221~2240题目解析
java·leetcode
秋饼15 小时前
Computer Use Agent Java 落地实战:感知-行动循环、执行器与安全围栏生产级实现
java·ai·技术分享·后端开发