慢查询日志
- 慢查询日志是MySql提供的一种日志记录,它用来记录在MySql中响应时间超过阈值的语句,具体指运行时间超过
long_query_time
值的SQL,则会被记录到慢查询日志中。 - 具体指运行时间超过
long_query_time
值的SQL,则会被记录到慢查询日志中。long_query_time
的默认值为10,意思是运行10秒以上的语句。 - 根据日志来查看哪些SQL超出了我们的最大忍耐时间值,比如一条SQL执行超过5秒钟,我们就算慢SQL,希望能收集超过5秒的SQL,结合EXPLAIN进行分析。
查看是否开启慢查询:
查看是否开启:
SHOW VARIABLES LIKE '%slow_query_log%';
+---------------------+--------------------------+ | Variable_name | Value | +---------------------+--------------------------+ | slow_query_log | ON | | slow_query_log_file | DESKTOP-78I02VU-slow.log | +---------------------+--------------------------+
- 开启慢查询:
SET GLOBAL slow_query_log=1;
(临时生效)
永久开启:
- 修改my.cnf文件,[mysqld]下增加或修改参数:
slow_query_log=1
slow_query_log_file=/var/lib/mysql/slowQuery.log
如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会带来一定的性能影响。
小试牛刀
- 查看当前慢查询阈值:
SHOW VARIABLES LIKE 'long_query_time%';
- 设置自定义阈值:
set global long_query_time=3;
- 重新开启新会话查看是否设置成功:
SHOW GLOBAL VARIABLES LIKE 'long_query_time';
- 执行
SELECT SLEEP(4);
毫无疑问这是一个慢查询 - 查看慢查询SQL条目数:
SHOW GLOBAL STATUS LIKE '%Slow_queries%';
日志分析工具mysqldumpslow
常用参数:
- s:是表示按照何种方式排序
- c:访问次数
- l:锁定时间
- r:返回记录
- t:查询时间
- al:平均锁定时间
- ar:平均返回记录数
- at:平均查询时间
- t:即为返回前面多少条的数据;
- g:后边搭配一个正则匹配模式,大小写不敏感的;
常用参考命令:
得到返回记录集最多的10个SQL
mysqldumpslow -s r -t 10 slowLog.log
得到访问次数最多的10个SQL
mysqldumoslow -s c -t 10 slowLog.log
得到按照时间排序的前10条里面含有左连接的查询语句
mysqldumpslow -s t -t 10 -g "left join" slowLog.log
建议结合|和more使用,否则可能出现爆屏情况
mysqldumpslow -s r -t 10 slowLog.log | more
版权属于:带翅膀的猫
本文链接:https://www.chengpengper.cn/archives/100/
转载时须注明出处及本声明