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

news2024/12/24 2:49:22

目录

背景

解决方案

总结


背景

     线上系统运行几年后,被项目上提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的方案。进行分库分表等处理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1277682.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言——深入理解指针(4)

目录 1.回调函数 2. qsort 函数的使用 2.1 排序整型数据 2.2 排序结构体数据 3. qsort 函数的模拟实现 1.回调函数 回调函数就是通过一个函数指针调用的函数。 你把函数的地址作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,被调…

Linux:查看端口占用的进程

命令 netstat -tunlp可以从图中看到,端口被那个进程占用,对应进程的pid是多少。

软件测试工程师如何面试?

首先作为HR的角度: 一般我们面试的时候都会问应聘者一些问题,但是问什么?怎么问?每个HR都会有不同的做法。 有的HR问的比较广泛,有的HR比较注重专业度,还有的HR喜欢问一些开放性的问题,没有标…

版本控制系统Git学习笔记-Git分支操作

文章目录 概述一、Git分支简介1.1 基本概念1.2 创建分支1.3 分支切换1.4 删除分支 二、新建和合并分支2.1 工作流程示意图2.2 新建分支2.3 合并分支2.4 分支示例2.4.1 当前除了主分支,再次创建了两个分支2.4.2 先合并test1分支2.4.3 合并testbranch分支 2.5 解决合并…

智慧工地一体化解决方案(里程碑管理)源码

智慧工地为管理人员提供及时、高效、优质的远程管理服务,提升安全管理水平,确保施工安全提高施工质量。实现对人、机、料、法、环的全方位实时监控,变被动“监督”为主动“监控”。 一、建设背景 施工现场有数量多、分布广,总部统…

C++11 左值 右值

什么是左值?什么是左值引用? 左值是一个表示数据的表达式(如变量名或解引用的指针),我们可以获取它的地址可以对它赋 值,左值可以出现赋值符号的左边,右值不能出现在赋值符号左边。定义时const修饰符后的左 值&am…

亚马逊云科技re:Invent大会,助力安全构建规模化生成式AI应用

2023亚马逊云科技re:Invent全球大会进入第三天,亚马逊云科技数据和人工智能副总裁Swami Sivasubramanian博士在周三的主题演讲中,为大家带来了关于亚马逊云科技生成式AI的最新能力、面向生成式AI时代的数据战略以及借助生成式AI应用提高生产效率的精彩分…

变量和引用

变量和引用 2.1.深入认识变量 2.1.1.什么是变量 变量是在程序中保存用户数据的一段内存存储空间,变量名是内存空间的首地址 变量三要素:名称、类型、值 2.1.2.变量的名称 组成: 字母、数字、下划线组成,不能以数字开头 变量名称的长…

Android 获取应用签名

Android 获取应用签名 本文主要讲下在android中如何获取应用签名. 也方便平时用来区分一个应用是不是原包应用. 1: 通过PackageManager获取签名信息 首先,通过packageManager获取到指定应用的PackageInfo. 这里需要传入的flag是PackageManager.GET_SIGNATURES /*** {link P…

scrapyd及gerapy的使用及docker-compse部署

一、scrapyd的介绍 scrapyd是一个用于部署和运行scrapy爬虫的程序,它允许你通过JSON API(也即是web api)来部署爬虫项目和控制爬虫运行,scrapyd是一个守护进程,监听爬虫的运行和请求,然后启动进程来执行它们 scrapyd的安装 scr…

蓝桥第一期模拟总结

文章目录 1.动态的 Tab 栏2.地球漫游3.迷惑的this4.燃烧卡路里5.魔法失灵了6.年龄统计 所有题目链接 1.动态的 Tab 栏 本题要实现一个tab栏固定效果,看见题目就想到css中的 position: fixed; 尝试了很久都没能实现效果,后来又想到了粘性定位 position: …

网络编程之套接字

端口 && IP 在学习套接字编程之前,我们必须了解一下前缀知识。首先是IP和端口的作用。 在这之前,我们要明白一件事。那就是把数据从一台主机发送到另一台主机,是目的吗???当然不是!&a…

TOP-K问题和向上调整算法和向下调整算法的时间复杂度问题的分析

TOP-K问题 TOP-K问题:即求数据结合中前K个最大的元素或者最小的元素,一般情况下数据量都比较大 比如:专业前10名、世界500强、富豪榜、游戏中前100的活跃玩家等 对于Top-K问题,能想到的最简单直接的方式就是排序,但是…

聊聊测试for Jeffky

什么是测试 测试是一个系统性的过程,它涉及到在已开发的软件中执行程序、应用工具和技术来评估其质量、功能和性能。这个过程的目的是发现并纠正程序中的错误,提高软件的可靠性和稳定性,以满足用户的需求。 测试的分类 什么是自动化测试 自动…

Android Termux 安装Kali Linux 或 kali Nethunter史诗级详细教程

Android Termux 安装Kali Linux 或 kali Nethunter史诗级详细教程 一、Termux配置1、下载安装2、配置存储和换源3、基本工具安装 二、Kali Linux安装1、下载安装脚本2、更换apt源3、图形化安装 三、Kali Nethunter安装1、下载安装脚本2、更换apt源3、图形化连接 四、报错汇总1、…

五、关闭三台虚拟机的防火墙和Selinux

目录 1、关闭每台虚拟机的防火墙 2、关闭每台虚拟机的Selinux 2.1 什么是SELinux

《第一行代码:Android》第三版4.2常用控件的使用方法(1)

概述 本文主要讲解常用控件的使用&#xff0c;包括&#xff1a;TextView、Button、EditText、ImageView、ProgressBar、AlertDialog。 布局文件 布局文件是activity_main.xml,内容如下&#xff1a; <?xml version"1.0" encoding"utf-8"?> <…

Spring Cloud笔记 —— 什么是Spring Cloud?

引言&#xff1a; 在写这篇博客之前&#xff0c;其实吧&#xff0c;博主很久之前有过一段时间的Spring Cloud的案例项目开发经验&#xff0c;就是一个案例项目开发而已&#xff0c;也说不上有多高大上&#xff0c;那个时候&#xff0c;我其实也是从众而已罢了&#xff0c;毕竟现…

Asp.Net Core Web Api内存泄漏问题

背景 使用Asp.Net Core Web Api框架开发网站中使用到了tcp socket通信&#xff0c;网站作为服务端开始tcp server&#xff0c;其他的客户端不断高速给它传输信息时&#xff0c;tcp server中读取信息每次申请的byte[]没有得到及时的释放&#xff0c;导致内存浪费越来越多&#…

WEBAPI返回图片显示在VUE前端

WEBAPI部分 通过nuget安装Opencvsharp &#xff0c;这部分用来做图像处理 在controller中写如下方法&#xff0c;我要对原图进行旋转使用了Opencv&#xff0c;如果不需要旋转可以用注释的代码 [HttpGet(Name "ShowImage")]public async Task<IActionResult> …