持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情
首先查看我们的DB有没有开启慢SQL的记录
1.查看状态
测试:
-- 查询慢sql的记录状态
show VARIABLES like '%slow_query_log%'
输出结果:
可以看到这里是没有打开的。默认是关闭的
2.开启MYSQL 慢SQL日志记录
测试:
-- 设置为开启,注意只是开启当前db 并且重启后会失效。
set GLOBAL slow_query_log=1
再次查看状态:
可以看到状态已经打开为OFF。
3.查看慢SQL的阈值
测试:
-- 查询慢查询的时间设置
show VARIABLES like 'long_query_time%'
输出结果:
可以看到这里是10秒 默认值。
4.设置慢SQL的阈值
测试:
-- 设置慢sql的阈值
set GLOBAL LONG_query_time=3
注意重新打开链接在进行查看。
5. 模拟慢SQL
测试:
select SLEEP(4)
执行完成后也可以去:/var/lib/mysql/63e8f1d1ac28-slow.log目录查看 sql记录
或者使用sql 查看慢sql的条数:
-- 可以用来做性能评估
show GLOBAL status like '%Slow_queries%'
输出结果:
可以看到是三条记录和上图的日志文件中的记录是一致的。
注意:以上操作都不是永久的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
参数代表的含义:
- s: 是表示按照何种方式排序;
- c: 访问次数;
- l: 锁定时间;
- r: 返回记录;
- t: 查询时间;
- al: 平均锁定时间;
- ar: 平均返回记录数;
- at: 平均查询时间;
- t: 即为返回前面多少条数据;
- 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的出现次数。
实践是检验真理的唯一方法! 明天见🥰🥰🥰