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 的耗时情况

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

相关推荐
java_cj5 小时前
数据库范式化设计与性能优化全攻略
数据库·后端·性能优化·架构·开源
Noushiki5 小时前
MySQL索引优化实战:高效查询的黄金法则
数据库·sql·mysql
TDengine (老段)5 小时前
TDengine Commit 与 Flush 机制 — 从内存到磁盘的数据落盘全流程
大数据·数据库·物联网·架构·时序数据库·iot·tdengine
Dxy12393102165 小时前
Python 操作 MySQL 事务:从入门到避坑
android·python·mysql
ID_180079054736 小时前
(淘宝 / 京东)商品评论 API 接口:技术实战案例与架构分析
服务器·数据库·架构
爱莉希雅&&&6 小时前
Zabbix监控初步搭建
linux·运维·数据库·mysql·zabbix
狼与自由6 小时前
mysql到clickhouse
数据库·mysql·clickhouse
六月雨滴6 小时前
Oracle 数据库之归档日志
数据库·oracle·dba
土狗TuGou6 小时前
SQL内功笔记 · 第6篇:窗口函数的使用ROW_NUMBER等
java·数据库·后端·sql·mysql
川石课堂软件测试6 小时前
使用mock进行接口测试教程
数据库·python·功能测试·测试工具·华为·单元测试·appium