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 的耗时情况
-
以上统计情况都仅供我们参考。