MySQL 性能分析

MySQL 性能分析

对 mysql 进行性能分析,主要就是提升查询的效率,其中索引占主导地位。对 mysql 进行性能分析主要有如下几种方式:

方式一:查看 sql 执行频次

show global status like 'Com_______'; // global 表示全局

show session status like 'Com_______';

主要查看select、insert、update、delete四种情况,Value 表示执行的次数。如果 select 次数占大部分,也侧面的告诉了我们 sql 优化的方向,可以考虑给数据库表添加索引来提升查询效率。

方式二:慢查询日志

方式一找到了 sql 优化的方向,因此现在我们需要找到具体的慢 sql。刚好 mysql 也提供了慢查询日志,慢查询日志记录了执行时间超过指定参数(long_query_time,单位:秒。默认是10秒)的所有 sql 语句的日志,默认是没有开启的,需要我们修改配置文件。

  • 如果是 Linux 系统下的 mysql,配置文件为:etc/my.cnf

// 开启慢查询日志

slow_query_log=1

long_query_time=2 // 慢查询设置的阈值

  • 由于本次我的演示为 Windows 版本的 mysql,修改慢查询配置分为指令和配置文件修改。
    • 配置文件:C:\ProgramData\MySQL\MySQL Server 8.0\my.ini,具体配置文件为my.ini,如果路径不对可自行查询自己电脑的路径。

    • 指令修改:show variables like '%quer%';

      show variables like '%quer%'; 用于查看 mysql 的各项配置。

      set global slow_query_log='ON'; // 开启慢查询日志

      set global slow_query_log_file='D:/logs/slow-sql-log.log' // 重新设置慢查询的存放路径

    • 演示:我已将 long_query_time 修改为 2 秒,person表中插入了一千七百多万行数据。

      演示:select * from person;

      然后查看慢查询日志文件:

      查看具体的 sql 和耗时后,就可以针对该条 sql 进行优化了。

方式三:show profiles(详情)

方式二介绍的慢查询日志也有一点的弊端,假如有一条很简单的 sql,但是执行时间为 1.99 秒,因此就不会被记录到日志文件中,但是这确实也是存在的一种慢查询情况,因此引入 show profiles。show profiles 能够在做 sql 优化时帮助我们了解时间都耗费在哪里去了。

  • show profiling :查看当前 mysql 是否支持 prifile 操作

    select @@hava_profiling;

  • profiling 默认是关闭的,开启 profiling

    select @@profiling; // 查询结果0表示关闭状态,1表示开启

    set profiling = 1; // 开启

  • 执行几条 sql,然后查看 profiling

    select * from person;

    select * from person where id = 70935;

    select * from person where name = '姓名test';

    select count(*) from person;

  • 查看 show profiles

    具体的耗时和 sql 就展示出来了。

    • 查看指定 query_id 的 sql 语句各个阶段的耗时情况。

      show profile for query 2; // 查看query_id 为 2 的耗时情况

    • 查看指定 query_id 的 sql 语句 cpu 的使用情况。

      show profile cpu for query 2; // 查看query_id 为 2 的耗时情况

以上统计情况都仅供我们参考。

相关推荐
在努力的前端小白13 分钟前
Spring Boot 敏感词过滤组件实现:基于DFA算法的高效敏感词检测与替换
java·数据库·spring boot·文本处理·敏感词过滤·dfa算法·组件开发
未来之窗软件服务15 分钟前
自建知识库,向量数据库 (九)之 量化前奏分词服务——仙盟创梦IDE
数据库·仙盟创梦ide·东方仙盟·自建ai·ai分词
冒泡的肥皂4 小时前
MVCC初学demo(一
数据库·后端·mysql
.Shu.5 小时前
Redis Reactor 模型详解【基本架构、事件循环机制、结合源码详细追踪读写请求从客户端连接到命令执行的完整流程】
数据库·redis·架构
Bruce_Liuxiaowei7 小时前
MySQL完整重置密码流程(针对 macOS)
mysql
麦麦大数据7 小时前
F003疫情传染病数据可视化vue+flask+mysql
mysql·flask·vue·大屏·传染病
薛晓刚7 小时前
当MySQL的int不够用了
数据库
SelectDB技术团队8 小时前
Apache Doris 在菜鸟的大规模湖仓业务场景落地实践
数据库·数据仓库·数据分析·apache doris·菜鸟技术
星空下的曙光8 小时前
mysql 命令语法操作篇 数据库约束有哪些 怎么使用
数据库·mysql
小楓12018 小时前
MySQL數據庫開發教學(一) 基本架構
数据库·后端·mysql