Mysql——》慢查询日志
推荐链接:
一、慢查询的概念
慢查询:指查询花费大量时间的查询。 慢查询日志:指mysql记录所有执行超过long_query_time参数设定的时间阈值的SQL语句的日志。
二、慢查询的原因
-
扫描行数过多 查询不需要的记录 总是取出全部列 重复查询相同的数据
三、慢查询的配置
1、是否开启慢查询日志
-- 是否开启慢查询日志,on开启,off关闭,默认值为off show variables like slow_query_log%;
Q:为什么慢查询日志默认关闭? A:因为开启慢查询日志是有代价的(跟 bin log、optimizer-trace 一样)
2、慢查询日志的开启、关闭
方式1:动态修改参数(重启后失效) 方式2:修改my.cnf文件(重启后生效)
-- 开启 set @@global.slow_query_log=1; -- 关闭 set @@global.slow_query_log=0;
3、执行超过多长时间的 SQL记录到慢查询日志
-- 查看慢查询时间阈值,默认值为10s show variables like %long_query_time%; -- 设置超过3s的SQL记录到慢日志 set @@global.long_query_time=3;
4、没有使用索引的 SQL是否记录到慢查询日志
-- 是否开启,默认值为off关闭 show VARIABLES like %log_queries_not_using_indexes%; -- 开启 set @@global.log_queries_not_using_indexes=1; -- 关闭 set @@global.log_queries_not_using_indexes=0;
5、慢查询日志的文件存放路径
-- 查看慢查询日志的路径:/data/mysql/data/dcbi-3306/log/slow.log show variables like slow_query_log_file%;
三、慢查询的模拟
-- 方式一 select sleep(10); -- 方式二 set global long_query_time=0;
四、慢查询日志:根据查询时间提取
cd /data/mysql/data/dcbi-3306/log sed -n /2022-10-21T00/,/2020-10-22T00:00/p slow.log > 20221021.log
五、慢查询日志分析:mysqldumpslow工具
参数链接:
1)慢查询日志的文件路径
-- 查看有多少慢查询 show global status like slow_queries; -- 查看慢查询日志的文件路径:/data/mysql/data/dcbi-3306/log/slow.log show variables like slow_query_log_file%;
2)mysqldumpslow的路径
一般都在Mysql的bin目录下,如:cd /opt/app/install/mysql-5.7.19/bin
3)mysqldumpslow的参数
mysqldumpslow --help
4)mysqldumpslow的示例
cd /data/mysql/data/dcbi-3306/log -- 查询用时最多的10条慢sql mysqldumpslow -s t -t 10 -g select slow.log -- 查询用时最多,并且包含左连接的的10条慢sql mysqldumpslow -s t -t 50 -g "left join" slow.log -- 访问次数最多的10个SQL语句 mysqldumpslow -s c -t 10 slow.log -- 记录集最多的10个SQL语句 mysqldumpslow -s r -t 10 slow.log -- 查询用时最多的10条慢sql,并输出到txt mysqldumpslow -s t -t 10 -g select slow.log > result.txt -- 查询用时最多的10条慢sql,并输出到csv mysqldumpslow -s t -t 10 -g select slow.log > result.csv
Count:代表这个 SQL 执行了多少次 Time:代表执行的时间,括号是累计时间 Lock:表示锁定的时间,括号是累计时间 Rows:表示返回的记录数,括号是累计记录数