小言_互联网的博客

MySQL性能分析工具的使用

445人阅读  评论(0)

前言
👏 作者简介:我是笑霸final,一名热爱技术的在校学生。
📝 个人主页:个人主页1 || 笑霸final的主页2
📕 系列专栏:数据库
📧 如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀
🔥 如果感觉博主的文章还不错的话,👍点赞👍 + 👀关注👀 + 🤏收藏🤏
🐉 欢迎访问我的个人博客 ====> 笑霸final的个人博客
🧙 gitee主页笑霸final | | github主页笑霸final


一、查看系统性能参数

使用 SHOW STATUS 语句查询一些MySQL数据库服务器的 性能参数 、 执行频率 。
SHOW STATUS语句语法如下:
SHOW [GLOBAL|SESSION] STATUS LIKE '参数';

一些常用的性能参数如下

  • Connections:连接MySQL服务器的次数。
  • Uptime:MySQL服务器的上线时间。
  • Slow_queries:慢查询的次数。
  • Innodb_rows_read:Select查询返回的行数
  • Innodb_rows_inserted:执行INSERT操作插入的行数
  • Innodb_rows_updated:执行UPDATE操作更新的行数
  • Innodb_rows_deleted:执行DELETE操作删除的行数
  • Com_select:查询操作的次数。
  • Com_insert:插入操作的次数。对于批量插入的 INSERT 操作,只累加一次。
  • Com_update:更新操作的次数。
  • Com_delete:删除操作的次数。
  • last_query_cost:统计SQL的查询成本

二、定位执行慢的 SQL:慢查询日志

开启slow_query_log
mysql > set global slow_query_log='ON';
来查看下慢查询日志是否开启,以及慢查询日志文件的位置:
show variables like %slow query_log%'
修改long_query_time阈值
show variables like '%long_query_time%';
查看慢查询数目
SHOW GLOBAL STATUS LIKE '%Slow_queries%';

慢查询日志分析工具:mysqldumpslow

在生产环境中,如果要手工分析日志,查找、分析SQL,显然是个体力活,MySQL提供了日志分析工具mysqldumpslow

查看mysqldumpslow的帮助信息
mysqldumpslow --help

mysqldumpslow 命令的具体参数如下

  • -a: 不将数字抽象成N,字符串抽象成S
  • -s: 是表示按照何种方式排序:
    • c: 访问次数
    • l: 锁定时间
    • r: 返回记录
    • t: 查询时间
    • al:平均锁定时间
    • ar:平均返回记录数
    • at:平均查询时间 (默认方式)
    • ac:平均查询次数
  • -t: 即为返回前面多少条的数据;
  • -g: 后边搭配一个正则匹配模式,大小写不敏感的;

关闭慢查询日志

MySQL服务器停止慢查询日志功能有两种方法:
方式1:永久性方式
slow_query_log=OFF或者,把slow_query_log一项注释掉 或 删除#slow_query_log =OFF
重启MySQL服务,执行如下语句查询慢日志功能。

SHOW VARIABLES LIKE '%slow%'; #查询慢查询日志所在目录
SHOW VARIABLES LIKE '%long_query_time%'; #查询超时时长

方式2:临时性方式
使用SET语句来设置。 (1)停止MySQL慢查询日志功能,具体SQL语句如下。

SET GLOBAL slow_query_log=off; 

(2)重启MySQL服务,使用SHOW语句查询慢查询日志功能信息,具体SQL语句如下

SHOW VARIABLES LIKE '%slow%';
#以及
SHOW VARIABLES LIKE '%long_query_time%';

三、查看 SQL 执行成本

查看功能是否开启

show variables like 'profiling';

通过设置 profiling='ON’ 来开启 show profile:

set profiling = 'ON';


然后执行相关的查询语句。接着看下当前会话都有哪些 profiles,使用下面这条命令:

show profiles;

如果我们想要查看最近一次查询的开销,可以使用:

show profile;

show profile的常用查询参数:
① ALL:显示所有的开销信息。
② BLOCK IO:显示块IO开销。
③ CONTEXT SWITCHES:上下文切换开销。
④ CPU:显示CPU开销信息。
⑤ IPC:显示发送和接收开销信息。
⑥ MEMORY:显示内存开销信息。
⑦ PAGE FAULTS:显示页面错误开销信息。
⑧ SOURCE:显示和Source_function,Source_file,Source_line相关的开销信息。
⑨ SWAPS:显示交换次数开销信息。\


四、分析查询语句:EXPLAIN

官网介绍
https://dev.mysql.com/doc/refman/5.7/en/explain-output.html
点此跳转
https://dev.mysql.com/doc/refman/8.0/en/explain-output.htm
点此跳转

基本语法

EXPLAIN 或 DESCRIBE语句的语法形式如下:

EXPLAIN SELECT select_options
或者
DESCRIBE SELECT select_options

如果我们想看看某个查询的执行计划的话,可以在具体的查询语句前边加一个 EXPLAIN ,就像这样:EXPLAIN SELECT 1;

EXPLAIN 语句输出的各个列的作用如下:

EXPLAIN各列作用

    1. table
      不论我们的查询语句有多复杂,里边儿 包含了多少个表 ,到最后也是需要对每个表进行 单表访问 的,所以MySQL规定EXPLAIN语句输出的每条记录都对应着某个单表的访问方法,该条记录的table列代表着该表的表名(有时不是真实的表名字,可能是简称)。
    1. id
      我们写的查询语句一般都以 SELECT 关键字开头,比较简单的查询语句里只有一个 SELECT 关键字,比如下边这个查询语句SELECT * FROM s1 WHERE key1 = 'a';稍微复杂一点的连接查询中也只有一个 SELECT 关键字,比如:SELECT * FROM s1 INNER JOIN s2 ON s1.key1 = s2.key1 WHERE s1.common_field = 'a';
  • 3 select_type
    小结:
    结果值从最好到最坏依次是:system>const>eq_ref>ref>fulltext>ref_or_null>index_merge>
    unique_subquery>index_subquery>range>index>ALL其中比较重要的几个提取出来(见上图中的蓝色)。SQL性能优化的目标:至少要达到range级别,要求是ref级别,最好是consts级别。(阿里巴巴开发手册要求)

参考资料:尚硅谷宋红康mysql教程


转载:https://blog.csdn.net/weixin_52062043/article/details/128953758
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场