又是性能优化的一天之接口问题排查

背景

今天领导给了个任务,页面上有个功能请求接口特别慢,需要优化一下,哇,又是充满希望的一天!

问题排查

又是性能优化的一天之接口问题排查

打开F12看接口的执行时间,妈耶,执行了6.22秒,如果任务以来很多的话,那岂不是更慢,怪不得有些用户反映接口慢的要命。

用arthas(阿尔萨斯)排查接口中的慢方法,开启arthas,选择需要监控的服务

又是性能优化的一天之接口问题排查

trace命令格式:

trace 全路径类名 方法名

执行trace  com.dtstack.batch.service.job.impl.BatchJobJobService displayDffSpring,如图所示:

又是性能优化的一天之接口问题排查

 

我多触发了几下该接口,妈耶,执行了27s,从图中可以看到是com.dtstack.batch.service.job.impl.BatchJobJobService类的getSpecifiedLevelJobJobs方法慢,占了总时间的99%,ctrl+c退出此监控,输入

trace com.dtstack.batch.service.job.impl.BatchJobJobService getSpecifiedLevelJobJobs

又是性能优化的一天之接口问题排查

从图中发现基本上是com.dtstack.batch.dao.BatchJobJobDao类的listByParentJobKeysWithOutSelfTask方法慢,此时此刻,我微微一笑,就这?就这?问题找到了,这不就是sql优化嘛,好吧,搞起

又是性能优化的一天之接口问题排查

大眼一瞟,这啥年代了,写sql还用not in,咋想的,想害朕?

执行一下sql看看运行时长,5s多!

explain查看sql执行计划

又是性能优化的一天之接口问题排查

如我所愿,确实是因为not in 导致没用到索引,而且这两张表会越来越大,且目前都是百万级别的表。

问题解决

开发人员一般都知道开发的时候要用not exists来代替,更改sql后执行,瞬间出结果,explain查看执行计划:

又是性能优化的一天之接口问题排查

 

打个版,看一下效果。

又是性能优化的一天之接口问题排查

看看,从秒级到毫秒级的质变,问题就此解决!

总结

老铁们,写这篇文章是为了给大家一些解决问题的思路,希望对大家有所帮助!!!也许,这就是技术人员仅有的那点虚荣心吧,加油!

相关文章:

  • 2022-12-23
  • 2022-02-17
  • 2021-10-01
  • 2021-08-18
  • 2021-08-23
  • 2022-02-03
  • 2021-07-10
  • 2021-11-20
猜你喜欢
  • 2021-08-13
  • 2021-06-21
  • 2022-12-23
  • 2022-02-10
  • 2022-12-23
  • 2021-09-10
  • 2021-11-07
相关资源
相似解决方案