08-MySql 慢查询分析-工具篇

本文详细介绍MySQL慢查询配置、分析及工具使用。涵盖慢查询日志配置、mysqldumpslow和pt_query_digest工具的使用方法及优缺点,帮助读者深入理解慢查询分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MySql 慢查询分析

一、慢查询配置

  • 慢查询默认关闭,相关配置如下:
配置说明默认值
slow_query_log记录慢查询日志开关OFF
slow_query_log_file指定慢查询日志存储路径和文件默认和数据文件在一个路径
long_query_time指定慢查询SQL执行阈值10秒
log_queries_not_using_indexes是否记录未使用索引的SQLOFF
log_output日志存放的地方TABLE或者FILE, 使用table的时候,会存到mysql库的slow_Log表里面,不推荐修改,保持默认即可FILE

1.1 查询

SHOW VARIABLES
WHERE
	variable_name IN (
		'slow_query_log',
		'slow_query_log_file',
		'long_query_time',
		'%log_queries_not_using_indexes%',
		'log_output'
	);
  • 结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PxtAlK2V-1576570988812)(https://note.youdao.com/yws/api/personal/file/A336F0AE04A34CD88FEB405A8257AB96?method=download&shareKey=d81a28056f50da58216a103f2e68700e)]

1.2 修改

set global slow_query_log= 1/0 ;
show VARIABLES like '%datadir%'; //查询数据文件存储路径
set global slow_query_log_file= 'E:\\slow.log';//修改慢查询日志保存路径
set global log_queries_not_using_indexes= 0/1; //没有使用索引的查询是否需要记录
set global long_query_time= 0.2; //设置阈值为200毫秒,注意修改后,在新的session中才能查询到新的值,后续就能生效了,如果要保证重新后也能生效,需要写到my.ini文件

  • 配置了慢查询后,它会记录符合条件的SQL
    包括:
新增语句
查询语句
数据修改语句
已经回滚得SQL 

二、慢查询分析

2.1 日志内容

  • 慢查询日志内容,如下是一条完整的慢查询日志
# User@Host: root[root] @ intellif-PC1161 [192.168.31.147]  Id:    98
# Query_time: 0.000000  Lock_time: 0.000000 Rows_sent: 13  Rows_examined: 58
SET timestamp=1560936581;
SELECT
	*
FROM
	t_book,
	t_gangs,
	t_role
WHERE
	t_role.bookId = t_book.id
AND t_role.gangsId = t_gangs.id
ORDER BY
	t_role.power DESC;
  • 相关信息使用表格展示如下
字段含义
User@Host用户名 、主机信息IP信息
Id线程ID号
Query_time执行花费的时间【单位:毫秒】
Lock_time执行获得锁的时间
Rows_sent获得的结果行数
Rows_examined扫描的数据行数
timestampSQL执行的具体时间
最后具体的SQL语句

三、工具

3.1 mysqldumpslow

  • mysqldumpslow是mysql自带的慢查询日志分析工具,它可以汇总除查询条件外其他完全相同的SQL,并将分析结果按照参数中所指定的顺序输出。
3.1.1 使用
  • 语法:
mysqldumpslow -s r -t 10 slow-mysql.log
-s order (c,t,l,r,at,al,ar) 
         c:总次数
         t:总时间
         l:锁的时间
         r:总数据行
         at,al,ar  :t,l,r平均数  【例如:at = 总时间/总次数】

  -t  top   指定取前面几天作为结果输出

mysqldumpslow.pl -s t -t 10 D:\DESKTOP-2EKGEE5-slow.log
3.1.2 示例
  • 命令:./mysqldumpslow.pl -s -r -t 10 E:/slow.log -s order
  • 抽取一条业务sql的统计结果:
Count: 2  Time=0.00s (0s)  Lock=0.00s (0s)  Rows=13.0 (26), root[root]@intellif-PC1161
  SELECT
  *
  FROM
  t_book,
  t_gangs,
  t_role
  WHERE
  t_role.bookId = t_book.id
  AND t_role.gangsId = t_gangs.id
  ORDER BY
  t_role.power DESC
  • 分析:这里展示的信息其实和2.1提到的类似。关于执行时间,加锁时间,获取行数,主机,sql等,mysqldumpslow主要的功能就是去重然后排序,
    将相同的sql的信息合并并做一些排序帮助我们查看日志
3.1.3 缺点
  • 必须登录mysql服务器。我们需要登录服务器获取慢查询日志文件。
  • 没有执行计划。只能知道sql和执行耗费的时间,没法看到执行计划,不利于进一步的分析。

3.2 pt_query_digest

  • pt_query_digest 第三方提供的一个是用于分析 mysql 慢查询的工具,相比 mysqldumpshow 来说 py-query_digest 的分析结果更完善具体。不过有点点遗憾
    的是pt-query-digest 只支持Linux平台。

汇总的信息【总的查询时间】、【总的锁定时间】、【总的获取数据量】、【扫描的数据量】、【查询大小】

Response: 总的响应时间。
time: 该查询在本次分析中总的时间占比。
calls: 执行次数,即本次分析总共有多少条这种类型的查询语句。
R/Call: 平均每次执行的响应时间。
Item : 查询对象

3.3 mysqlsla

  • 慢查询分析工具

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值