Mysql & 开启慢SQL记录并查找 分析

179 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情

首先查看我们的DB有没有开启慢SQL的记录

1.查看状态

测试:

-- 查询慢sql的记录状态
show VARIABLES like '%slow_query_log%'

输出结果:

image.png

可以看到这里是没有打开的。默认是关闭的

2.开启MYSQL 慢SQL日志记录

测试:

-- 设置为开启,注意只是开启当前db 并且重启后会失效。
set GLOBAL slow_query_log=1

再次查看状态:

image.png

可以看到状态已经打开为OFF。

3.查看慢SQL的阈值

测试:

-- 查询慢查询的时间设置
show VARIABLES like 'long_query_time%'

输出结果:

image.png

可以看到这里是10秒 默认值。

4.设置慢SQL的阈值

测试:

-- 设置慢sql的阈值
set GLOBAL LONG_query_time=3

注意重新打开链接在进行查看。

image.png

5. 模拟慢SQL

测试:

select SLEEP(4)

执行完成后也可以去:/var/lib/mysql/63e8f1d1ac28-slow.log目录查看 sql记录

image.png

或者使用sql 查看慢sql的条数:

-- 可以用来做性能评估
show GLOBAL status like '%Slow_queries%'

输出结果:

image.png

可以看到是三条记录和上图的日志文件中的记录是一致的。 注意:以上操作都不是永久的mysql重启后都会回到默认状态。
要想他永久生效,需要在 my.conf配置文件中添加以下设置

slow_query_log=1;  -- 设置状态为开启
slow_query_log_file=/var/lib/mysql/63e8f1d1ac28-slow.log  --设置慢SQL的日志存储位置
long_query_time=3; -- 设置慢SQL的阈值
log_output=FILE; -- 设置日志存入文件

日志分析工具 mysqldumpslow

参数代表的含义:

  1. s: 是表示按照何种方式排序;
  2. c: 访问次数;
  3. l: 锁定时间;
  4. r: 返回记录;
  5. t: 查询时间;
  6. al: 平均锁定时间;
  7. ar: 平均返回记录数;
  8. at: 平均查询时间;
  9. t: 即为返回前面多少条数据;
  10. g:后边搭配一个正则匹配模式,大小写不敏感的;

常用的命令

-- 得到返回记录集最多的 10个记录
mysqldumpslow -s r -t 10 /var/lib/mysql/63e8f1d1ac28-slow.log
-- 得到访问次数最多的10个sql
mysqldumpslow -s c -t 10 /var/lib/mysql/63e8f1d1ac28-slow.log
-- 得到按照时间排序的前10 条里面包含 左联查的查询语句
mysqldumpslow -s t -t 10 -g "left join" /var/lib/mysql/63e8f1d1ac28-slow.log

拿到 这些慢SQL 之后配合 Explain 进行SQL分析并进行调试,尽可能减少慢SQL的出现次数。
实践是检验真理的唯一方法! 明天见🥰🥰🥰