Mysql——》慢查询日志

推荐链接:
    总结——》【Java】
    总结——》【Mysql】
    总结——》【Redis】
    总结——》【Kafka】
    总结——》【Spring】
    总结——》【SpringBoot】
    总结——》【MyBatis、MyBatis-Plus】
    总结——》【Linux】
    总结——》【MongoDB】
    总结——》【Elasticsearch】

Mysql——》慢查询日志

  • 一、慢查询的概念
  • 二、慢查询的原因
  • 三、慢查询的配置
    • 1、是否开启慢查询日志
    • 2、慢查询日志的开启、关闭
    • 3、执行超过多长时间的 SQL记录到慢查询日志
    • 4、没有使用索引的 SQL是否记录到慢查询日志
    • 5、慢查询日志的文件存放路径
  • 三、慢查询的模拟
  • 四、慢查询日志:根据查询时间提取
  • 五、慢查询日志分析:mysqldumpslow工具
    • 1)慢查询日志的文件路径
    • 2)mysqldumpslow的路径
    • 3)mysqldumpslow的参数
    • 4)mysqldumpslow的示例

参考链接:官网Slow Query Log

一、慢查询的概念

慢查询:指查询花费大量时间的查询。
慢查询日志:指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工具

参数链接:官网mysqldumpslow

1)慢查询日志的文件路径

  -- 查看有多少慢查询
 show global status like 'slow_queries';
 
 -- 查看慢查询日志的文件路径:/data/mysql/data/dcbi-3306/log/slow.log
 show variables like 'slow_query_log_file%';

Mysql——》慢查询日志_第1张图片
Mysql——》慢查询日志_第2张图片

2)mysqldumpslow的路径

一般都在Mysql的bin目录下,如:cd /opt/app/install/mysql-5.7.19/bin

3)mysqldumpslow的参数

mysqldumpslow --help
参数 参数值 描述
-s order al 平均锁定时间
ar 平均返回记录数
at 平均查询时间(默认)
c 计数
l 锁定时间
r 返回记录
t 查询时间
-r 返回记录
-t num 查询时间,倒序排列,前n条记录
-a 只显示前n个查询
-n num
-g pattern
-h hostname
-i name
-l

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

Mysql——》慢查询日志_第3张图片

Count:代表这个 SQL 执行了多少次
Time:代表执行的时间,括号是累计时间
Lock:表示锁定的时间,括号是累计时间
Rows:表示返回的记录数,括号是累计记录数

你可能感兴趣的:(Mysql,mysql,慢查询,slow,long_query_time,slow_query_log,mysqldumpslow)