前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java如何定位自己项目中的慢业务

Java如何定位自己项目中的慢业务

作者头像
Java极客技术
发布于 2023-02-23 09:32:08
发布于 2023-02-23 09:32:08
75100
代码可运行
举报
文章被收录于专栏:Java极客技术Java极客技术
运行总次数:0
代码可运行

我们都知道,在日常开发中我们经常遇到在钉钉群或者在业务群中会出现各种各样的慢业务的接口,比如某个接口在钉钉群疯狂出现,然后就有某些领导艾特你来解决这个慢业务问题,今天阿粉就来说说如何通过各种手段来定位慢业务问题,以及如何解决慢业务的问题。

定位慢业务问题

首先我们先来说这么慢业务问题,一般的慢业务问题,总归就那么几种,SQL 问题,代码业务问题,前端解析问题,前端的解析问题我们就不说了,为什么呢?因为如果是前端解析缓慢的话,身为后端,我们也没什么好的处理办法,但是如果另外的两种情况,那么我们就可以来好好的掰扯一下了。

代码业务问题

那么什么是会出现代码业务问题呢?

循环调用:

这种情况,一般都循环调用同一段代码,每次循环的逻辑一致,前后不关联。比如说,我们要初始化一个列表,预置12个月的数据给前端

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Model> list = new ArrayList<>();
for(int i = 0 ; i < 12 ; i ++) {
    // 计算某个月的数据,逻辑比较复杂,难以批量计算,效率也无法很高
    Model model = calOneMonthData(i); 
    list.add(model);
}

这只是其中来计算某些数据,但是甚至还有人会在循环中去查询一些表的数据,也就是我们通常所说的最不可取的那种 for 循环中有查询。

如果这时候每个月的数据计算相互都是独立的,我们完全可以采用多线程方式进行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 建立一个线程池,注意要放在外面,不要每次执行代码就建立一个,具体线程池的使用就不展开了
public static ExecutorService commonThreadPool = new ThreadPoolExecutor(5, 5, 300L,
        TimeUnit.SECONDS, new LinkedBlockingQueue<>(10), commonThreadFactory, new ThreadPoolExecutor.DiscardPolicy());
 
// 开始多线程调用
List<Future<Model>> futures = new ArrayList<>();
for(int i = 0 ; i < 12 ; i ++) {
    Future<Model> future = commonThreadPool.submit(() -> calOneMonthData(i););
    futures.add(future);
}
 
// 获取结果
List<Model> list = new ArrayList<>();
try {
   for (int i = 0 ; i < futures.size() ; i ++) {
      list.add(futures.get(i).get());
   }
} catch (Exception e) {
   LOGGER.error("出现错误:", e);
}

这是循环调用的那种,但是还有其他的,比如出现顺序调用,那么就是执行两个方法,执行方法a,然后再执行方法B,这种情况也是可以进行优化的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
A a = methodA();

B b = methodB();

这时候我们可以使用 JDK8 中的异步编程来实现,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

CompletableFuture<A> futureA = CompletableFuture.supplyAsync(() -> methodA());
CompletableFuture<B> futureB = CompletableFuture.supplyAsync(() -> methodB());

CompletableFuture.allOf(futureA,futureB) // 等a b 两个任务都执行完成

这样A B 两个逻辑可以并行执行。

CompletableFuture 这个阿粉就不讲了,为什么呢?因为阿粉在之前的文章中已经详细的讲过了,大家如果有兴趣的话,可以翻看一下。

如果你检查过你的代码之后,你发现并没有能出现慢业务的操作,那么接下来就是重头戏了。

SQL导致的慢业务

SQL导致的慢业务,这个是七成以上的开发都会遇到的问题。因为有百分之70左右的慢业务都是因为自己的慢SQL引起的。

那么我们该怎么去定位这个慢SQL呢?

慢查询日志记录慢SQL

定位慢SQL可以通过慢查询日志来查看慢SQL,默认的情况下,MySQL数据库不开启慢查询日志(slow query log),需要手动把它打开

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SET GLOBAL slow_query_log =ON;

查看下慢查询日志配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SHOW VARIABLES LIKE ‘slow_query_log%
  • slow_query_log:表示慢查询开启的状态
  • slow_query_log_file:表示慢查询日志存放的位置

explain查看分析SQL执行计划

当我们去定位自己表中增加的索引有没有生效的时候,我们使用的一半都是 explain 关键字,通过关键字给我们返回的内容,我们就能判断我们写的SQL 有没有命中索引。

那么他反馈的参数分别都是什么意思呢?

  • id
  1. id 值相同时,被视为一组从上向下执行。
  2. 如果是子查询,id 值会递增,id 值越高,优先级越高
  3. id为NULL最后执行
  • select_type
  1. simple: 简单的select, 查询中不包含子查询或者 union。例如: select name from student where id= 100
  2. primary: 子查询中最外层查询, 查询中若包含任何复杂的子部分, 最外层的select被标记为primary
  3. derived:在 from 的列表中包含的子查询被标记成 derived(派生表)。例如: explain select id from (select id,name from student) student1 where name= ‘name100’
  4. subquery:在 select 或 where 列表中包含了子查询,则子查询被标记成 subquery。例如: explain select id from student where score = (select score from student where name=‘name100’);
  5. union: union中的第二个或后面的select语句. 例如: EXPLAIN select id from student where id<12691055 UNION all select id from student where id<12691060;
  • table

显示这一步所访问数据库中表名称. 有时候不是真实的表名, 可能是简称

  • partitions

该字段看table所在的分区, 值为NULL表示表未被分区

  • possible_keys

可能会使用到的索引

  • type

表示连接类型,查看索引执行情况的一个重要指标 以下性能从好到坏依次:system > const > eq_ref > ref >ref_or_null > index_merge > unique_subquery > index_subquery > range >index > ALL

system:这种类型要求数据库表中只有一条数据,是const类型的一个特例,一般情况下是不会出现的

const:通过一次索引就能找到数据,一般用于主键或唯一索引作为条件,这类扫描效率极高,速度非常快

eq_ref:常用于主键或唯一索引扫描,一般指使用主键的关联查询 ref : 常用于非主键和唯一索引扫描

ref_or_null:这种连接类型类似于ref,区别在于MySQL会额外搜索包含NULL值的行

index_merge:使用了索引合并优化方法,查询使用了两个以上的索引

unique_subquery:类似于eq_ref,条件用了in子查询

index_subquery:区别于unique_subquery,用于非唯一索引,可以返回重复值

range:常用于范围查询,比如:between … and 或 In 等操作

index:全索引扫描

ALL:全表扫描

  • key

实际使用到的索引

  • key_len

实际使用到的索引的长度

  • rows

该列表示MySQL估算找到我们所需的记录,需要读取的行数

  • filtered

该列是一个百分比,是满足条件的记录数量与我们查询了多少记录数量的比值

  • extra

该字段包含有关MySQL如何解析查询的其他信息,它一般会出现这几个值:

Usingfilesort:表示按文件排序,一般是在指定的排序和索引排序不一致的情况才会出现,一般见于order by语句

Using index:表示是否用了覆盖索引

Using temporary: 表示是否使用了临时表,性能特别差,需要重点优化,一般多见于groupby语句,或者union语句

Using where : 表示使用了where条件过滤

Using index condition:MySQL5.6之后新增的索引下推,在存储引擎层进行数据过滤,而不是在服务层过滤,利用索引现有的数据减少回表的数据

这个关键字是非常需要大家掌握的,因为能非常准确的反映出你写的 SQL 语句到底有没有命中索引,如果你的 SQL 都没有命中索引的话,那么就可以从你的 SQL 上下手来解决这个慢业务的问题了。

你学会怎么定位慢业务问题了么?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-12-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java极客技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
3DS Max渲染器V-ray最新版6.0:Chaos V-Ray for 3ds max 2020-2023版安装教程
3DS Max渲染器V-ray最新版6.0:Chaos V-Ray for 3ds max 2020-2023版安装教程
学习牛牛
2023/04/19
6220
3DS Max渲染器V-ray最新版6.0:Chaos V-Ray for 3ds max 2020-2023版安装教程
3DS Max渲染器V-ray最新版6.0:Chaos V-Ray for 3ds max 2020-2023版安装教程
3ds Max是一款功能强大的三维制作软件,它还支持与其他Autodesk产品进行协作,如Revit、AutoCAD和Maya等,可以通过导入和导出数据进行互操作。这意味着用户可以在不同的Autodesk产品之间无缝切换,方便快捷地进行三维制作和设计。同时,3ds Max还支持各种脚本和插件,用户可以通过编写脚本和使用插件来扩展软件的功能和性能。用户可以根据自己的需要来选择合适的脚本和插件,例如用于自动化建模的脚本、用于增强渲染质量的插件等。这些脚本和插件可以帮助用户提高工作效率,缩短制作周期,从而更好地满足用户的需求。总的来说,3ds Max是一款非常强大的三维制作软件,它不仅自身功能丰富,而且与其他Autodesk产品协作无缝,支持各种脚本和插件,为用户提供了更多的选择和可能性。
用户10507785
2023/04/18
9790
3DS Max渲染器V-ray最新版6.0:Chaos V-Ray for 3ds max 2020-2023版安装教程
3Dsmax丨3dsmax2010软件下载安装教程(含全版本安装包)_永久使用
3D Max是一款功能强大的三维建模和渲染软件,可以创造出宏伟的游戏世界,布置精彩绝伦的场景,实现设计可视化,打造身临其境的虚拟现实 (VR)。除游戏开发外,在广告、影视、工业设计、建筑设计、多媒体制作、辅助教学以及工程可视化等领域也具有广泛的应用。3ds Max 2023版本的更新要点包括拓扑功能、新自动备份工具栏、glTF材质和导出器,以及其他多项功能的改进。据Autodesk公司称,3ds Max 2023版本侧重于提高个人和团队的生产力、资产创建和实时工作流程,适用于Windows 10+操作系统。
用户10507785
2023/04/16
4440
3Dsmax丨3dsmax2010软件下载安装教程(含全版本安装包)_永久使用
三维动画maya软件中文版,maya软件2023版安装教程下载
Maya是一款功能强大的三维建模和动画软件,它可以帮助用户创作出各种各样的动画、游戏、电影和视觉效果。如果你是一名设计师、游戏开发者、动画师或影视制作人,那么Maya就是你的最佳选择。
用户10413399
2023/03/20
9540
三维动画maya软件中文版,maya软件2023版安装教程下载
3dmax2023软件下载安装操作教程
Autodesk 3DS MAX 2023是一款3D建模和渲染对于需要制造、工业设计和建筑领域的用户,3D Max则是更好的选择。它提供了更多的制造工具,如辅助线和可编程脚本,可以创建复杂的机械零件和建筑结构。此外,3D Max还支持Linux操作系统,使其更适合在大型计算机集群中使用。
小昭在奔跑
2023/04/13
2.2K0
3dmax2023软件下载安装操作教程
3Dsmax丨3dsmax2023软件下载安装教程(含全版本安装包)_永久使用
3DS MAX是一款功能强大的三维建模、动画和渲染软件,其中提供了多种高质量的渲染工具,包括Arnold渲染器、mental ray渲染器等,可以帮助用户生成高质量的图像和动画。用户可以通过自定义光照、材质、阴影等参数来调整渲染效果,以达到理想的渲染结果。此外,3DS MAX还支持多种渲染模式,包括扫描线渲染、光线跟踪渲染、分布式渲染等,可以根据用户的需要进行选择。3DS MAX还提供了强大的材质编辑器,可以帮助用户创建各种材质效果,例如金属、玻璃、皮革等。总之,3DS MAX的高质量渲染工具和可调整的渲染效果使其成为三维渲染中不可或缺的工具。
资源牛牛
2023/04/20
1.7K0
3Dsmax丨3dsmax2023软件下载安装教程(含全版本安装包)_永久使用
3ds MAX下载 3ds MAX免费下载3ds Max 2023最新版安装包下载+详细安装教程
3ds Max是一款被广泛应用于建筑、室内设计、动画、游戏开发等领域的三维建模和动画软件,由美国软件公司Autodesk开发。该软件以其强大的功能和易于使用的特点,在三维建模领域占据了重要地位,被广泛应用于电影、电视、游戏等制作行业。在这篇文章中,我们将介绍3ds Max的各种功能以及如何使用这个软件来创建精美的三维模型和动画。
用户10065438
2023/03/10
1.8K0
3ds MAX下载 3ds MAX免费下载3ds Max 2023最新版安装包下载+详细安装教程
VRay3.0-6.2 for 3dmax2014-2024软件下载及安装教程
1.安装VRay 3.0【vr 3.0】 for 3dsmax2014 (64位) 英文官方破版,双击打开VRay 3.0的安装程序。
知识兔下载
2023/03/11
2.7K0
「模型构建软件」Revit 2023详细下载安装教程
Revit是由Autodesk公司开发的一款三维建模软件,用于建筑信息模型(BIM)的设计、建模和绘制。它是一种全面的工具,可以在建筑、土木工程、机电工程和管道等多个领域中使用。
软件安装教程
2023/04/21
1.3K0
「模型构建软件」Revit 2023详细下载安装教程
Maya2021:领航未来的三维动画制作软件+全版本安装包
Maya2021是一个由Autodesk公司开发的领先的三维动画制作软件。该软件旨在提供集成一体化的工具,帮助用户创建复杂的动画、可视化效果、游戏开发、影视后期制作以及虚拟现实等领域的内容。与其他软件相比,Maya2021的最大优势在于它的高度可定制性和可扩展性。
用户10313071
2023/04/12
6080
Maya2021:领航未来的三维动画制作软件+全版本安装包
三维动画软件MAYA最新中文版,玛雅maya2023软件安装教程下载
Maya是一款非常强大的三维建模软件,使用者可以在其中创造出各种形态的三维图像和动画。在我的使用过程中,我深深感受到了这款软件的强大和便捷。
用户10413399
2023/03/18
1K0
三维动画软件MAYA最新中文版,玛雅maya2023软件安装教程下载
3Dsmax丨3dsmax2023软件下载安装教程(含全版本安装包)_永久使用
1、下载3ds Max 2023软件安装包下载后使用解压软件解压。解压之后打开解压安装包,找到setup,右键以管理员身份运行。
用户10507785
2023/04/20
1K0
3Dsmax丨3dsmax2023软件下载安装教程(含全版本安装包)_永久使用
Maya2023:开启个性化设计新时代 安装步骤 安装包下载|含全版本
Maya 2023是一款旨在帮助用户实现无限创意、超越想象的三维动画、建模和渲染软件。它为用户提供了丰富多彩的工具和功能,可以充分满足各种不断变化的需求,从而使用户能够进一步提高其创作效率和运用 Maya 软件进行创作的体验。
用户10313071
2023/04/08
8950
Maya2023:开启个性化设计新时代 安装步骤 安装包下载|含全版本
autodesk2023软件合集-autodesk下载安装-autodesk系列软件2023
Autodesk是一家著名的跨国软件公司,主要提供设计、工程和娱乐方面的软件解决方案。下面是Autodesk系列软件的简要介绍:
用户10519159
2023/04/27
7170
【三维计算机图形软件】Maya 2024 下载安装教程
Maya是一款由Autodesk公司开发的三维计算机图形软件,常用于影视、游戏、建筑、工业设计、产品设计等领域。它被广泛认为是世界上最强大的三维制作软件之一,可用于建模、动画、渲染、动力学、布料模拟、粒子效果等多个方面。
软件安装教程
2023/04/20
6310
【三维计算机图形软件】Maya 2024 下载安装教程
Autodesk 3dmax 2023.1【附激活补丁+安装教程】中文免费版下载
3DMAX2023是Autodesk公司最新开发的一款三维建模渲染制作软件。我们可以使用该软件完成工业设计、建筑设计、多媒体制作、游戏开发等工作。3DMAX2023百度云还添加了多种丰富灵活的工具,让您可以提高工作效率。3DMAX2023知识兔版还具有非常强大的三维渲染功能,我们可以利用这个软件来完成已经设计好的三维模型的渲染操作,使模型效果变得更加逼真。3DMAX2023知识兔百度云可用于广告、影视、游戏、建筑、工业等不同领域哦!3DS Max是一个强大的3D建模和动画解决方案,游戏开发者,视觉效果艺术家和图形设计师使用,以创建庞大的世界,惊人的设置,和迷人的虚拟现实(VR)体验。
用户10122115
2022/11/13
2.7K0
maya是什么软件?三维动画软件Maya最新中文版,maya软件安装教程
Maya是一款用于三维动画、建模、渲染和视觉效果的计算机软件,它是影视、游戏和广告等行业的标准软件之一。使用Maya可以创建各种类型的动画、游戏和电影效果。下面是Maya的主要功能:
用户10413399
2023/03/23
1.1K0
maya是什么软件?三维动画软件Maya最新中文版,maya软件安装教程
2025最新Autodesk 3ds Max 2022正版下载教程:中文环境配置+建模功能解析
Autodesk 3ds Max 2022是一款专业的三维建模、动画和渲染软件,广泛应用于影视制作、游戏开发、建筑可视化等领域。其核心功能包括:
万里顾一诚
2025/03/19
2761
2025最新Autodesk 3ds Max 2022正版下载教程:中文环境配置+建模功能解析
Maya2023安装教程(Maya2023图文安装步骤)
Maya 2023做为一款强大且实用的工具,目前主要被运用与当前互联网相关行业,该产品在很多行业都受到欢迎与追捧,最大的优点就在于它可以在保证工作质量的情况下,很多人并不会安装,下面由我带给大家Maya 2023安装教程!
凯撒拿破龙丁真附体
2022/08/11
2.5K1
Maya2023安装教程(Maya2023图文安装步骤)
Revit2023下载 Revit 2023安装教程
Revit是一款实用的BIM模型设计软件,Revit系列软件是为建筑信息模型(BIM)构建的,可帮助建筑设计师设计、建造和维护质量更好、能效更高的建筑,软件提供了丰富实用的功能模块,涵盖了建筑建模、结构建模、MEP建模、高级建模、分析、文档编制等。(本文来源于互联网仅供学习交流使用)
小昭在奔跑
2023/04/15
8030
Revit2023下载 Revit 2023安装教程
推荐阅读
相关推荐
3DS Max渲染器V-ray最新版6.0:Chaos V-Ray for 3ds max 2020-2023版安装教程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档