(二十二) 程序员必备: 10秒到0.1秒,亿级数据下MySQL慢查询分析教程

(二十二) 程序员必备: 10秒到0.1秒,亿级数据下MySQL慢查询分析教程

精选文章moguli202025-04-01 14:46:0218A+A-

我们在日常使用和面试中,经常遇见sql优化的问题,今天阳仔就带大家详细介绍一下mysql的优化向的知识和相关技巧;

一.哪些场景会出现慢查询?

主要体现就是查询sql 时间比较长,接口相应时间长,导致页面加载也比较慢,那么哪些情况会出现慢查询了,主要是以下几种情况:

  • 聚合查询
  • 多表查询
  • 表数据量过大查询
  • 深度分页查询

二. 如何定位慢查询了?

方案一: 开源工具(实际用的比价多)

  • 调试工具: Arthas (阿里开源项目,YYDS)

官方定义: Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。

主要都是命令行操作为主,官方有中文文档,使用起来比较简单,不懂的可以直接去官方查看文档.

启动界面

面板信息

如何通过Arthas 来分析慢查询了?

使用trace命令


原理就是追踪线程中具体方法的响应时间来确认慢查询,Arthas 会给出具体的追踪分析数据,可以看到具体的调用次数,总耗时,平均耗时等信息.

官方文档介绍,YYDS 啥都有

  • 运维工具:

Prometheus : (2012 年的google 开源项目,且持续在运营中.)


原理: 通过http协议周期性的抓取被监控的组件的状态

中文文档地址
:https://prometheus.fuckcloudnative.io/di-yi-zhang-jie-shao/overview

系统架构

具有单独的管理界面 也可以命令行操作,也可以接入第三方工具使用.

如何使用Prometheus来定位慢查询?

  1. 需要在mysql中配置慢查询的日志

2,在Prometheus中安装mysql exporter 插件并配置

  1. 配置Prometheus

  1. 可视化查看慢mysql的慢查询结构 ,需要安装Grafana ,配置上Prometheus 的数据源即可

Skywalking (笔者之前就是用的这个,单体应用和微服务都可以用)

分布式系统,最合适使用的应用程序性能监控工具,提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。

整体架构

中文文档地址
:https://skywalking.apache.org/zh/2020-04-19-skywalking-quick-start/#

可视化界面

可以直接看到接口的执行时间,非常方便

还可以直接追踪具体的sql ,功能非常强大 ,使用也很简单

方案二: mysql 自带的慢日志查询 (只在测试环境中使用,生产环境不使用,有性能问题)

配置完毕之后,通过以下指令重新启动MySQL服务器进行测试,查看慢日志文件中记录的信息
/var/lib/mysql/localhost-slow.log。

方案三: 增加系统日志

使用项目自带日志,对关键接口的相应时间 进行系统日志记录,再从代码层面反推具体的sql问题,比较适合业务量还不大的项目.

方案四 : 使用'explain'命令 进行sql 语句的解析

这个是对于比较负责的业务,在写了sql语句后,需要对sql 语句是否变慢做一个校验,主要是定位到慢SQL后的分析工作.可以配置前面的方案一起使用,可以确认以下sql 是否命中索引,是否进行了全表扫描

explain 命令

possible_key: 主要是可能用到的所有

key: 当前已经命中的索引

key_len: 索引占用的内存大小

extra : 优化的建议

type: sql的链接类型 性格: null>system (系统中的表)>const (主键)> eq_ref (主键/唯一索引)> ref (索引)>range(范围) > index (索引树)> all (全盘扫描)

一般type 为index/all 此时sql就需要优化了


哪些场景会出现慢查询? 如何定位慢查询? 如何分析慢查询? 你们的项目中都是怎么来处理了的? 评论区留下你的看法

点击这里复制本文地址 以上内容由莫古技术网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

莫古技术网 © All Rights Reserved.  滇ICP备2024046894号-2