【MySQL | 第八篇】在MySQL中,如何定位慢查询以及对应解决方法?

在这里插入图片描述

文章目录

  • 8.在MySQL中,如何定位慢查询以及对应解决方法?
    • 8.1MySQL慢查询日志
      • 8.1.1开启慢查询
        • (1)修改配置文件
        • (2)设置全局变量
      • 8.1.2日志记录在表上(实践)
      • 8.1.3日志记录在文件上(实践)
        • (1)mysqldumpslow
    • 8.2深度分析慢SQL
      • 8.2.1问题
      • 8.2.2步骤一:分析SQL执行计划
      • 8.2.3索引优化

8.在MySQL中,如何定位慢查询以及对应解决方法?

  • 三种方法定位慢查询
    • Skywalking工具:实时监控接口性能,一眼锁定“拖油瓶”。报表详列各接口及内部组件耗时,尤其关注SQL执行时间,迅速圈定问题SQL;
    • MySQL内置慢查询日志;

8.1MySQL慢查询日志

  • 慢查询日志是 MySQL 内置的一项功能,可以记录执行超过指定时间的 SQL 语句

  • 以下是慢查询的相关参数,大家感兴趣的可以看下:

    参数含义
    log_output日志输出位置,默认为 FILE,即保存为文件,若设置为 TABLE,则将日志记录到 mysql.show_log 表中,支持设置多种格式
    slow_query_log_file指定慢查询日志文件的路径和名字,可使用绝对路径指定,默认值是主机名-slow.log,位于配置的 datadir 目录
    long_query_time执行时间超过该值才记录到慢查询日志,单位为秒,默认为 10
    min_examined_row_limit对于查询扫描行数小于此参数的SQL,将不会记录到慢查询日志中,默认为 0
    log_queries_not_using_indexes是否将未使用索引的 SQL 记录到慢查询日志中,开启此配置后会无视 long_query_time 参数,默认为 OFF
    log_throttle_queries_not_using_indexes设定每分钟记录到日志的未使用索引的语句数目,超过这个数目后只记录语句数量和花费的总时间,默认为 0
    log-slow-admin-statements记录执行缓慢的管理 SQL,如 ALTER TABLE、ANALYZE TABLE、CHECK TABLE、CREATE INDEX、DROP INDEX、OPTIMIZE TABLE 和 REPAIR TABLE,默认为 OFF
    log_slow_slave_statements记录从库上执行的慢查询语句,如果 binlog 的值为 row,则失效,默认为 OFF

8.1.1开启慢查询

有两种方式可以开启慢查询

  1. 修改配置文件
  2. 设置全局变量
(1)修改配置文件
  • 修改配置文件 my.ini,在[mysqld]段落中加入如下参数:

    [mysqld]
    log_output='FILE,TABLE'
    slow_query_log='ON'
    long_query_time=0.001
    
  • 然后需要重启 MySQL 才可以生效,命令为 service mysqld restart(永远生效)

(2)设置全局变量
  • 无需重启即可生效,但是重启会导致设置失效,设置的命令如下所示:
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL log_output = 'FILE,TABLE';
SET GLOBAL long_query_time = 0.001;

8.1.2日志记录在表上(实践)

  • 通过第二种方式:设置全局变量开启慢查询;
  • 使用全表查询语句:SELECT * FROM user;
  • 然后再查询慢查询日志:SELECT * FROM mysql.slow_log,可以发现其中有这样一条记录:

image-20240429214131920

  • 这样我们就可以通过 slow_log 表的数据进行分析,然后对 SQL 进行调优了。

8.1.3日志记录在文件上(实践)

  • 若将日志记录在文件上,使用 SHOW VARIABLES LIKE '%slow_query_log_file%' 来查看文件保存位置;
  • 可以看出每五行表示一个慢 SQL,这样查看比较费事,可以使用一些工具来查看。

image-20240429215409003

(1)mysqldumpslow

MySQL 内置了 mysqldumpslow 这个工具来帮助我们分析慢查询日志文件,Windows 环境下使用该工具需要安装 Perl 环境

可以通过 -help 来查看它的命令参数:

mysqldumpslow help

img

比如我们可以通过 mysqldumpslow -s t 10 LAPTOP-8817LKVE-slow.log 命令得到按照查询时间排序的 10 条 SQL 。

img

8.2深度分析慢SQL

8.2.1问题

定位到慢SQL后,如何进行深度分析?

8.2.2步骤一:分析SQL执行计划

  • 使用explain命令分析SQL执行计划:
    • Key & Key_len确认索引是否生效。若已建索引未被充分利用,可能存在失效问题。
    • Type扫视查询类型,警惕全表扫描(All/Full Scan)等低效访问模式,寻找优化突破口。
    • rows:预计需要扫描的记录数,预计需要扫描的记录数越小越好
    • Extra留意MySQL给出的执行建议,如“Using filesort”、“Using temporary”等,提示可能存在的额外排序、临时表操作,影响性能。

8.2.3索引优化

  • 针对上述分析结果:
    • 修复失效索引:添加缺失索引,调整或重建现有索引。
    • 解决回表查询问题:若发现回表现象,尝试增加覆盖索引(一次查询,就查到了全部需要的数据,避免 SELECT *)或减少SELECT字段,减轻IO压力。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/5016.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Scala 重难点总结

Scala 是一种功能强大的多范式编程语言,结合了面向对象编程和函数式编程的特性。下面是 Scala 中一些重要的重难点总结以及详细代码介绍: 函数式编程: Scala 支持函数作为一等公民,可以将函数赋值给变量,作为参数传递给…

大数据开发工作中的数仓设计(Hadoop,hive ,mysql )

1.HUE工具介绍使用 HUE是CDH提供一个hive和hdfs的操作工具,在hue中编写了hiveSQl也可以操作hdfs的文件 http://主机名字:端口号 hdfs的web访问端口 http://主机名字:端口号 hdfs的程序访问端口 进入后确保hdfs hive yarn 开启 在点击hue开启 在这里面也可以进行h…

Xinlinx FPGA如何降低Block RAM的功耗

FPGA中降低Block RAM的功耗有两种方式,分别是选择合适的写操作模式以及Block RAM的实现算法及综合设置。我们知道对于采用IP核生成对应的RAM时,会有最小面积算法、低功耗算法以及固定原语,但是采用最小功耗算法有时由于级联长度导致无法实现&…

js ajax初次跨域请求

最近有个页面,要请求第三方的一个api, postman里测试返回结果正常,状态正常 可在php js前端请求,返回错误,取不到任何有用信息,status 0. 没接触过跨域,一直以为第三方接口问题&#xff0c…

AntDesignReact提示key重复解决方案

在使用antd树形组件的时候,有时候会存在挂载相同的账号,相同账号的id是重复的,组件直接就不能用了,所以查找论坛,发现可以使用这个插件解决; 下载 npm install uuid项目中使用 // 导入 import { v4 as uu…

币圈Cryptosquare论坛

Cryptosquare综合性资讯论坛汇集了币圈新闻、空投信息、社会热点以及与Web3相关的工作信息。让我们一起解锁加密世界的种种可能性,探索Cryptosquare论坛带来的精彩! 币圈新闻板块: Cryptosquare论坛的币圈新闻板块是用户获取最新加密货币行业…

CentOS安装Docker指南

Docker安装与配置教程 Docker作为一种轻量级的虚拟化技术,在现代软件开发和运维中扮演着重要的角色。下面,我将以技术博主的身份,向大家详细介绍如何在Linux系统上安装和配置Docker,特别是如何设置Docker的监听地址和端口&#x…

Elasticsearch中【文档查询】DSL语句以及对应的Java实现

目录 全文检索查询 精准查询 布尔查询 排序、分页查询 高亮 地理查询 复合查询 Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括: 查询所有:查询出所有数据,一般测…

全新突破:「Paraverse平行云」实现3D/XR企业级应用全面接入Apple Vision Pro

在前不久举行的GTC开发者大会上,英伟达引领行业风向,宣布其Omniverse平台能够助力企业将3D/XR应用流畅传输至Apple Vision Pro混合现实头显。在英伟达与苹果这两大科技巨头的合作下,此举标志着3D/XR技术迈向新纪元的关键一步。「Paraverse平行云」实时云…

《HCIP-openEuler实验指导手册》1.6 Apache静态资源配置

知识点 常用用途: 软件仓库镜像及提供下载服务: 配置步骤 删除网站主目录中的文件(本实验机目录为/home/source ip为192.168.12.137 端口为81) cd /home/source rm -rf *在主目录中新建6个文件夹如下图 mkdir test{1..6}新建…

将本地.mp4推流成rtsp流?(windows)

概述 如何在本地机器上进行rtsp推流整个操作? 1.软件安装 1. 推流-ffmpeg下载 从官网下载windows版本,该版本已经编译好了 放到C:下找一个目录解压,我放到C:\ffmpeg-7.0-essentials_build\进入系统环境变量设置:将…

使用nodejs和python脚本实现爬虫程序,并将抓取数据生成词云图看板

创建项目,初始化目录结构。 创建项目名称为pachong。运行 npm init -y 初始化项目。修改package.json文件中的type属性为module。安装 npm 包:npm install puppeteer #爬虫 | 自动化UI测试首先确保你的电脑上有python3环境安装两个python包 pip instal…

c#数据库: 8.在窗体上显示学生信息

以上一章学生信息表为例,首先将查询的学生信息存储到数据集中,然后将数据集与数据显示控件绑定,从而实现学生信息在窗体上的显示 (1)创建一个名为StudentGridView的窗体应用程序,为窗体添加一个DataGridVi…

微信小程序 图片上传到文件服务器

业务需求&#xff1a; 图片先上传到后台文件服务器&#xff0c;服务器返回图片的id及相关信息&#xff0c;再和其他要提交的内容一块提交到后台接口。 话不多说&#xff0c;上代码 index.wxml <van-uploader max-count"5" multiple file-list"{{ photoD…

Stable Diffusion 模型分享:Counterfeit-V3.0(动漫)

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里&#xff0c;订阅后可阅读专栏内所有文章。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 高质量动漫风格模型。 条目内容类型大模型基础模…

Java进阶-JINQ详解与使用

本文详细介绍了JINQ&#xff08;Java Integrated Query&#xff09;&#xff0c;一种强化Java中数据查询能力的库&#xff0c;提供类SQL的查询语法和类型安全的操作。文章首先解释了JINQ的基本功能和应用&#xff0c;随后通过具体示例展示了如何使用JINQ进行数据过滤、投影、连…

Unity镂空图像做法

问题和解决方案 现在要完成一个需求&#xff0c;即镂空中间部分的image&#xff0c;外围image可以定义颜色并可选屏蔽点击&#xff0c;而中间的image需要透明且可以穿透&#xff0c;必须不能屏蔽点击。 由此拆分成了两个问题&#xff1a; 1.定义外围image颜色&#xff0c;内…

Facebook的语言学:社交媒体如何影响我们的沟通方式

1. 引言 社交媒体已经成为人们日常生活中不可或缺的一部分&#xff0c;而Facebook作为其中最具影响力的平台之一&#xff0c;不仅改变了人们之间的社交方式&#xff0c;也对我们的语言学产生了深远的影响。本文将深入探讨Facebook的语言学特点&#xff0c;以及它如何塑造和改变…

Spring6 当中 获取 Bean 的四种方式

1. Spring6 当中 获取 Bean 的四种方式 文章目录 1. Spring6 当中 获取 Bean 的四种方式每博一文案1.1 第一种方式&#xff1a;通过构造方法获取 Bean1.2 第二种方式&#xff1a;通过简单工厂模式获取 Bean1.3 第三种方式&#xff1a;通过 factory-bean 属性获取 Bean1.4 第四种…

【保姆级教程】用IDEA2023版本给RuoYi-Vue添加子模块

文章目录 前言添加子模块新建子模块新建子模块界面&#xff1f;新建子模块界面&#xff01; 修改pom依赖配置RuoYiApplication添加测试接口配置接口权限测试 前言 若依前后端分离框架能够极大方便当前开发任务&#xff0c;并且使用的技术栈也相当丰富&#xff0c;但是目前只提…