系统响应优化

news/2025/1/4 6:56:59/

主要针对接口响应慢

  1. 问题定位
  2. 解决方案

1. 定位

接口响应时间太长,怎么去定位问题?

  1. 网络问题(ping一下就知道了,一般不会有)
  2. 根据自己多年写bug的经验, 扒拉一下代码看一下看问题出在哪里了?
    ① 循环查询 ②计算量大 ③慢sql
  3. 利用工具监控, 远程debug 或者 Arthas(阿尔萨斯)
    Arthas的使用后续会专门写一篇,先看这个arthas:Java调试利器,线上Debug不是梦

2. 解决方案

  1. 避免循环查询
    避免在循环中, 查询(插入,调用接口),避免多次 IO, 可以改为批处理
  2. 空间换时间
    使用map,redis等技术,一次性把数据加载进内存中,然后处理
  3. 异步处理
    对于不用立即返回的数据, 可以放在后台慢慢处理的, 可以使用异步线程,后端慢慢处理, 如文件上传内容解析
  4. 预处理
    提前结算出结果,放在缓存或者数据库中,需要结果的直接取,
    常用场景, 以年,月,日为维度统计的结果,用定时器定时触发计算出结果
  5. 多线程并行计算
    串行计算逻辑简单, 当计算量大的时候, 可以考虑并行计算,
    避免锁竞争的方法是,把数据进行分类, 各组数据互不相干,直接塞进线程计算
    即使最终结果是串行计算的结果, 也可以将计算过程并行化,然后将结果合并
  6. 慢sql
    慢sql 牵扯到sql优化 可以参考MySQL性能管理及架构设计
    使用执行计划 explain 可以分析慢sql部分原因
    sql常用优化策略: ①使用索引(索引建多了 也会影响效率)
    ②避免表关联(必须使用的情况下,可以用小表关联大表) ③减少子查询
    ④避免全表扫描, 常用策略如下
	(1)避免在 where 子句中对字段进行 null 值判断(2)避免在 where 子句中使用!=或<>操作符(3)避免在 where 子句中使用 or 来连接条件(4)in 和 not in ,like 也要慎用,可用exists 代替in(子查询中的表小,就用in,否则就用exists; not in 对内外表都是全表扫描,not exists 子查询依然能用到索引 ; 对于连续的数值,能用 between 就不要用 in )(5)避免在where子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描(6)like左模糊匹配   like '***%'
  1. 归档 数据量特别大,且数据利用率不高,可以将不常用的数据进行归档
  2. 热数据特别多的情况下, 更换数据库,如ES,Hbase之类的更适合大数据的数据库
  3. 事务
    尤其是大事务, 由于事务没有提交,会导致数据库连接一直被占用,有可能引发死锁等问题

http://www.ppmy.cn/news/349882.html

相关文章

显卡属于计算机主机还是外设,笔记本电脑能不能换外设显卡

外部设备又称“外设”&#xff0c;是计算机系统中的重要组成部分&#xff0c;主要是指除了计算机主机以外的硬件设备&#xff0c;可进行传输、转送、储存大量的数据和信息等内容。?下面是小编给大家整理的一些相关信息&#xff0c;希望对大家有帮助! 笔记本能不能换显卡呢? 有…

Linux uinput

Linux Uinput 是一个模拟用户输入事件的内核驱动程序&#xff0c;它允许用户空间程序通过创建虚拟输入设备节点来生成模拟输入事件&#xff0c;这些事件可以是键盘、鼠标、触摸屏或其他输入设备的事件。此外&#xff0c;Uinput 还可以为虚拟输入设备设置各种属性&#xff0c;并…

【部署】MNN推理

【参考】Ubuntu下阿里MNN 模型的c读取调用 - 知乎 这篇将整个过程归纳为以下5步&#xff1a;&#xff08;1&#xff09;创建Interpreter&#xff08;2&#xff09;调度配置ScheduleConfi&#xff08;3&#xff09;后端配置BackendConfig&#xff08;4&#xff09;创建session&…

【Hive】array相关的函数总结 『数组 | 数组与元素 | 两个数组』

1. 数组 array()&#xff1a;创建一个数组。例如&#xff0c;array(1,2,3)将创建一个包含1、2、3三个元素的数组。array_max(array)&#xff1a;返回数组中的最大值。例如&#xff0c;array_max(array(1,2,3))将返回3。array_min(array)&#xff1a;返回数组中的最小值。例如&…

36.SpringBoot实用篇—运维

目录 一、实用篇—运维。 &#xff08;1&#xff09;程序打包与运行&#xff08;Windows版&#xff09;。 &#xff08;2&#xff09;spring-boot-maven-plugin插件作用。 &#xff08;3&#xff09;程序打包与运行&#xff08;Linux版&#xff09;。 &#xff08;4&#…

Package fontspec Error: The font “***“ cannot be found.解决方案

问题描述 Windows10系统&#xff0c;使用LaTeX编译xelatex时&#xff0c;提示找不到“SimHei”字体。但实际上&#xff0c;系统中安装了“SimHei”字体&#xff0c;初步怀疑是LaTeX没有识别出来&#xff0c;在看遍了所有相关国内博客&#xff0c;尝试修改字体&#xff0c;重新…

Latex Error: Package fontspec Error: The font “LiSu“ cannot be found.的解决办法

产生这个错误的原因&#xff1a;当前电脑中没有安装“隶书”这个字体。查看电脑中安装了哪些字体&#xff0c;请访问&#xff1a;C:\Windows\Fonts 看了一些解决办法&#xff0c;有人建议下载MS office办公软件&#xff0c;这个软件中会带有隶书这个字体。但是我笔记本中的MS o…

WPS的PPT 宋体 黑体显示乱码的解决方案

首先&#xff0c;要分析一下自己的显示乱码的原因&#xff0c;对此&#xff0c;我总结了两种处理方法&#xff0c;欢迎随时补充。 处理方案一&#xff1a; 首先&#xff0c;看一下自己是不是整个系统中的字体都是乱码。 方法一&#xff1a;如果系统中有微软的office软件的话…