百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

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

csdh11 2025-03-30 15:44 13 浏览

我们在日常使用和面试中,经常遇见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就需要优化了


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

相关推荐

用Python轻松修改Word文件的作者和时间,打造自己的专属效率工具

你是否曾经遇到过需要批量修改Word文件的作者、创建时间或修改时间的情况?手动操作不仅费时费力,还容易出错。可以用Python编写一个小工具,轻松解决这个问题!无论你是编程新手还是有一定经验的...

插件开发js代码划分(js插件编写)

在开发Chrome插件时,将JavaScript代码拆分成多个模块而非集中放置,主要基于性能优化、可维护性提升和浏览器插件特性适配等多方面的考量。以下是具体原因及区别分析:一、拆分的核心原因...

5分钟掌握Python中的标准输入、标准输出、标准错误

读取用户输入从标准输入获取输入:user_input=input("Impartyourwisdom:")print(f"Youshared:{user_input}")...

高大上的解答:在 'packages.pyi' 中找不到引用 'urllib3'

DeepSeek的一句代码:...

Flask 入门教程(flask快速入门)

目录什么是Flask?环境配置与安装第一个Flask应用:HelloWorld路由与视图函数模板与Jinja2表单处理与用户输入...

每日一库之 Go 语言开发者的神器—Gotx

点击上方蓝色“Go语言中文网”关注我们,领全套Go资料,每天学习Go语言简介Gotx是一个Go语言(Golang)的解释器和运行环境,只有单个可执行文件,绿色、跨平台,无需安装任何Go语言环境就可...

MySQL性能调优工具包制作(mysql性能调整)

一、最终工具包内容mysql_tuning_toolkit/├──scripts/#核心脚本│├──sysbench-pro.sh#...

掌握TensorFlow核心用法:从安装到实战的完整指南

一、为什么TensorFlow值得学习?作为全球使用最广泛的开源机器学习框架,TensorFlow已累计获得超过17万GitHub星标,支撑着Google搜索、Waymo自动驾驶、NASA卫星图像分析...

如何把PY 打包成EXE安装文件(pypy 打包exe)

将Python脚本打包成EXE文件通常使用第三方工具实现,以下是详细步骤和注意事项:...

Pygame Zero 详细使用教程(python zerorpc)

PygameZero是一个基于Pygame的简化游戏开发框架,特别适合初学者和快速原型开发。它隐藏了许多底层的复杂性,使得开发者可以更专注于游戏逻辑的实现。本文将通过分析提供的代码,详细介绍如...

Stable diffusion AI画图辅助脚本 Script 的使用(二)

本篇为脚本使用介绍的第二部分,主要介绍Promptmatrix提示词矩阵以及UltimateSDUpscale终极SD放大这两个脚本,同时也简单介绍一下如何编写自己的脚本。1、Promp...

一文明白Python 的import如何工作

Pythonimport系统的基础知识Python的import系统是该语言设计的关键部分,允许模块化编程和代码的轻松重用。了解这个系统对任何Python程序员都很重要,因为它决定了代码的结构...

Highlight.js - 前端的代码语法高亮库

千辛万苦写了篇技术分享,贴了一堆代码,兴高采烈地发到了自己的博客网站上。结果却发现代码全是白底黑字,字体还难看得很,你瞬间就没了兴致。能不能让网页也能像IDE那样,做带语法高亮的炫酷显示呢?来看一...

xbox xsx/s ps2模拟器 战神12,北欧女神2 配置教程

xsxxss下载PS2独立模拟器,Retroarch全能模拟器地址。...

RetroArch 着色器、金手指怎么用? 重返复古游戏萤幕滤镜效果

自从上次分享RetroArch模拟器的一些技巧后,许多模拟器新用户对老旧游戏机感到好奇,为什么游戏画面看起来会有很多马赛克。这主要是因为当年的游戏开发商是针对当时的屏幕进行设计的,所以在现在的高分辨率...