32. Mysql之慢日志浅谈

1.前言

  关于慢日志的有关介绍我在前面的第12小节有说过,https://www.cnblogs.com/zmc60/p/14940585.html  ,这里主要是说慢日志的几个参数对记录慢日志的影响

2.慢日志参数回顾 

slow_query_log=1 #是否启用慢查询日志,1为启用,0为禁用  
slow_query_log_file=slow.log #指定慢查询日志文件的路径和名字,可使用绝对路径指定;默认值是'主机名_slow.log',位于datadir目录  
long_query_time=2 #SQL语句运行时间阈值,执行时间大于参数值的语句才会被记录下来  
min_examined_row_limit=100 #SQL语句检测的记录数少于设定值的语句不会被记录到慢查询日志,即使这个语句执行时间超过了long_query_time的阈值  
log_queries_not_using_indexes=1   #将没有使用索引的语句记录到慢查询日志  
log_throttle_queries_not_using_indexes=10 #设定每分钟记录到日志的未使用索引的语句数目,超过这个数目后只记录语句数量和花费的总时间  
log-slow-admin-statements=1 #记录执行缓慢的管理SQL,如alter table,analyze table, check table, create index, drop index, optimize table, repair table等。  
log_slow_slave_statements=0 #记录从库上执行的慢查询语句  
log_timestamps=system #5.7版本新增时间戳所属时区参数,默认记录UTC时区的时间戳到慢查询日志,应修改为记录系统时区  
log_output=FILE,TABLE #指定慢查询日志的输出方式,从5.5版本开始可以记录到日志文件(FILE,慢查询日志)和数据库表(TABLE,mysql.slow_log)中

补充:慢日志的记录方式有两种,一种是记录在磁盘文件中,还有一种是记录在mysql.slow_log表中的,具体是哪一种,主要是由参数log_output决定的

mysql> show variables like '%log_out%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | FILE  |
+---------------+-------+

该参数有两个选项可以选择,一种是FILE,另外一种就是TABLE。

查看慢日志位置:show variables like '%slow_query_log_file%'; 

慢日志常用的分析工具: 一种是自带的mysqldumpslow,另一种是percona公司出品的pt-query-digest

mysqldumpslow方法:

常用命令:

返回平均查询时间前5的SQL: mysqldumpslow -s at  -t 5  /data/mysql/data/node1-slow.log
返回累计查询时间前5的SQL:mysqldumpslow -s t  -t 5  /data/mysql/data/node1-slow.log
返回总次数前5的SQL:mysqldumpslow -s c  -t 5  /data/mysql/data/node1-slow.log

慢日志内容

Time                 Id Command    Argument
# Time: 2023-07-31T21:34:47.169644+08:00
# User@Host: root[root] @ localhost []  Id:    11
# Query_time: 0.005322  Lock_time: 0.000333 Rows_sent: 4079  Rows_examined: 4079 Thread_id: 11 Errno: 0 Killed: 0 Bytes_received: 0 Bytes_sent: 161078 Read_first: 1 Read_last: 0 Read_key: 1 Read_next: 0 Read_prev: 0 Read_rnd: 0 Read_rnd_next: 4080 Sort_merge_passes: 0 Sort_range_count: 0 Sort_rows: 0 Sort_scan_count: 0 Created_tmp_disk_tables: 0 Created_tmp_tables: 0 Start: 2023-07-31T21:34:47.164322+08:00 End: 2023-07-31T21:34:47.169644+08:00
use world;
SET timestamp=1690810487;
select * from city;

上面字段解释:

Time:log记录的时间;           
User@Host:SQL执行的用户以及主机;           
id:连接的标识,这里指的是processlist id.
Query_time:SQL执行的时间;                            
Lock_time:获取锁的时间;
Rows_sent:返回客户端的结果行数;                 
Rows_examined:server层检查的行数;
Thread_id:连接的标识;                                      
Errno:SQL错误号,0表示没有错误;
Killed:语句终止的错误号,0表示正常终止;       
Bytes_received/sent:收到和发送的字节数;
Read_first:Handler_read_first的值,代表读取索引中第一个条目的次数。反映查询全索引扫描的次数。
Read_last:读取索引最后一个key的次数;             
Read_key:基于key读取行的请求数,较大说明使用正确的索引
Read_next:按顺序取下一行数据的次数,索引范围查找和索引扫描时该值会增大;
Read_prev:按顺序读取上一行的请求数,order by desc查询较优时该值较大;
Read_rnd:按固定位置读取行的请求数,大量的回表、没有索引的连接和对结果集排序时会增加;
Read_rnd_next:读取数据文件下一行的次数,大量表扫描、未创建或合理使用索引时会增加;
Sort_range_count:使用范围完成的排序次数;     
Sort_rows:排序的行数;
Sort_scan_count:通过扫描表完成的排序次数;   
Sort_merge_passes:排序算法合并的次数,如该值较大考虑增加sort_buffer_size的值
Created_tmp_disk_tables:创建内部磁盘临时表的数量;
Created_tmp_tables:创建内部临时表的数量;
Start/End:语句开始和结束时间

官方文档:https://dev.mysql.com/doc/refman/8.0/en/slow-query-log.html

pt-query-digest方法

官方文档https://www.percona.com/doc/percona-toolkit/LATEST/pt-query-digest.html

 

posted on 2021-08-01 19:01  太白金星有点烦  阅读(58)  评论(0编辑  收藏  举报

导航