今天让我们了解下 MySQL 性能分析大杀器 —— 开启慢查询日志。
开启慢查询日志
-
查看是否开启及如何开启慢查询日志
# 查看是否开启了慢查询日志
show variables like '%slow_query_log%';
# 开启慢查询日志(临时开启)
set global slow_query_log = 1;
如果要永久生效,就必须修改配置文件 my.cnf (其他系统变量也是如此)
修改 my.cnf 文件,[mysqld] 下增加或修改参数 slow_query_log 和 slow_query_log_file 后,然后重启 MySQL 服务器。
slow_query_log = 1
slow_query_log_file = /var/lib/mysql/slow-query.log
慢查询日志是由参数 long_query_time 控制,默认情况下 long_query_time 的值为 10 秒,可以使用以下命令查看
show variables like 'long_query_time%';
可以使用命令修改,也可以在 my.cnf 参数里面修改。
假如运行时间正好等于 long_query_time 的情况,并不会被记录下来。也就是说,在 mysql 源码里是 判断大于 long_query_time,而非大于等于
设置阙值到 3 秒钟的就是慢 sql
set global long_query_time = 3
设置慢查询日志阙值后看不出变化?
-
需要重新连接或新开一个会话才能看到修改值 -
或者直接使用以下命令也可以看到修改后的结果
show global variables like 'long_query_time';
如何测试?
# 模拟查询超过 4 秒钟
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 /var/lib/mysql/slow-query.log
# 得到访问次数最多的 10 条 sql
mysqldumpslow -s c -t 10 /var/lib/mysql/slow-query.log
# 得到按照时间排序的前 10 条里面包含左连接的查询语句
mysqldumpslow -s t -t 10 -g "left join" /var/lib/mysql/slow-query.log
另外建议在使用这些命令时结合 | 和 more 使用,否则有可能出现爆屏情况
mysqldumpslow -s r -t 10 /var/lib/mysql/slow-query.log | more
最后说个事
公号算法变了,为防止看不到我的更新
大家帮忙加个星标
点击上方的公众号卡片
再点右上角三个点
就能看到设为星标
算我跪下来求你们
作者简介:
95后某跨境电商企业程序猿,白天搬砖码代码,晚上自媒体写文章,持续更新编程、科技、互联网相关文章,偶尔也会无痛呻吟,感慨人生百态。自己淋过雨,所以也想为别人撑撑伞。
往期精选:
原文始发于微信公众号(浅墨觅尘往):MySQL 性能分析大杀器(第三章)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/222103.html