mysql(三)==》sql日志查询

1.发现问题

【1】配置mysql慢查询日志
//mysql默认关闭慢查询日志,用以下配置打开
set global slow_query_log = [on | off ];
//设置慢查询日志的路径
set global slow_query_log_file = sql_log/slowlog.log
//当sql执行时间超过该设置时间时,就会进入慢查询,想要直接开始慢查询,可设置长查询时间为0
set global long_query_time = xx.xxx秒
set global long_queries_not_using_indexes=[on|off]

若我们设置长查询为0.001s,那么每天就会产生大量的慢查询日志,那么我们人工查询就是很困难的事情。那么如何高效的分析慢查询日志?

【2】分析mysql慢查询日志

把查询日志当做参数,调用mysqldumpslow [OPTS…][LOGS…]命令行工具即可。或者使用pt-query-digest [OPTIONS] [FILES] [DSN]命令行工具。

安装percona-toolkit工具包之后:

mysql> show variables like 'long_query_time';//查看一下长查询时间:默认10s
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+

mysql> set global long_query_time = 0;//设置长查询时间为0,工作中一般设置为0.001

mysql> show variables like 'slow_query_log' ;//查看慢查询日志,默认关闭
+----------------+-------+
| Variable_name  | Value |
+----------------+-------+
| slow_query_log | OFF   |
+----------------+-------+

mysql> set global slow_query_log = on;//打开慢查询日志

mysql> show variables like 'slow_query_log_file';//查看慢查询日志路径
+---------------------+-------------------------------------------------+
| Variable_name       | Value                                           |
+---------------------+-------------------------------------------------+
| slow_query_log_file | /var/lib/mysql/izbp173bkvqwhsk998g7scz-slow.log |
+---------------------+-------------------------------------------------+
//进入该目录下,打开该文件可以看到慢查询日志
cd /var/lib/mysql/  
more izbp173bkvqwhsk998g7scz-slow.log 

//使用mysqldumpslow分析结果
mysqldumpslow izbp173bkvqwhsk998g7scz-slow.log
//使用pt-query-digest分析
pt-query-digest izbp173bkvqwhsk998g7scz-slow.log
【3】分析执行计划

explain:分析执行计划,可以跟select/delete/update/insert/replace语句
(1)id列
在这里插入图片描述

explain
select course_id,class_name,level_name,title,study_cnt
from imc_course a
join imc_class b on a.class_id = b.clss_id
join imc_level c on c.level_id = a.level_id
where study_cnt > 3000;

在这里插入图片描述

explain
select a.course_id,.title
from imc_course a
where a.course_id not in (select course_id from imc_chapter b);

在这里插入图片描述
(2)select_type列
在这里插入图片描述
在这里插入图片描述
(3)table列
在这里插入图片描述
(4)partitions列
在这里插入图片描述
(5)type列
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
id=1:即第一个select语句
对c表即imc_level和a表即imc_course进行全表扫描;
对b表进行eq_ref扫描:索引b.class_id=a.class_id
id=2:即第2个select语句
对b表中:where class_name = ‘mysql’ ,为常量,故对b表进行const扫描
对a表进行ref扫描:a.class_id=b.class_id 和 a.level_id = c.level_id
(6)possible_key列、key列、key_len列
在这里插入图片描述
(7)ref列
在这里插入图片描述
(8)rows列、filtered列
在这里插入图片描述
(9)Extra:额外信息
在这里插入图片描述
(10)案例
在这里插入图片描述

type常量const查询以及ref为const:user_id=1;
key_len=4:user_id为int类型。
在这里插入图片描述
rows=1:预估扫描行数
filtered:返回结果行数/读取行数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值