不是吧?还有人不会定位线上 MySQL 慢查询问题?
1. 慢查询日志的作用
慢查询日志默认不开启,建议手动开启,方便我们定位线上问题。
执行时间超过阈值的 SQL 会被写入到慢查询日志当中,这样可以帮助我们记录执行时间过长的 SQL 语句,定位线上慢 SQL 问题,方便我们进行 SQL 性能调优。
2. 慢查询日志的配置
2.1 查看是否开启了慢查询日志
默认是 OFF,不开启,可以手动开启。
2.2 开启慢查询日志
一种方法是可以使用 MySQL 命令开启:
另一种方法是修改 MySQL 配置文件,重新 MySQL 服务后,开启。
修改配置文件 my.cnf,加入下面一行命令
slow_query_log = ON
2.3 设置慢查询日志的阈值
慢查询日志的阈值默认是 10,单位是秒。
对于线上服务来说,10 秒太长了,我们可以手动修改。
一种是通过 MySQL 命令修改,比如修改为 1 秒:
另一种方法是修改 MySQL 配置文件,重新 MySQL 服务后,开启。
修改配置文件 my.cnf,加入下面一行命令
long_query_time = 1
相关视频解析:mysql调优教程
2.4 修改慢查询日志位置
使用 MySQL 命令查看慢查询日志位置:
想要修改慢查询日志位置,可以修改 MySQL 配置文件,重新 MySQL 服务后,开启。
修改配置文件 my.cnf,加入下面一行命令
slow_query_log_file = /usr/local/mysql/data/localhost_slow.log
2.5 记录更多慢查询 SQL
默认情况下管理语句是不会被记录到慢查询日志中,管理语句包括 ALTER TABLE、 ANALYZE TABLE、 CHECK TABLE、 CREATE INDEX、 DROP INDEX、 OPTIMIZE TABLE 和 REPAIR TABLE 等。
管理语句也是非常重要的,如果想要被记录,可以通过 MySQL 命令修改:
默认情况下,不使用索引的语句,也是不会被记录的。
够坑人吧!一不留神就掉坑里了,不记录不使用索引的语句,还要慢查询日志干嘛?
想要记录不使用索引的语句,可以通过命令修改:
3. 慢查询日志的使用
手动造一条慢 SQL,测试一下效果,user 表中有 100 万表数据:
然后看一下慢查询日志文件的内容:
SQL 语句和执行时间都被记录了。
4. 分析慢查询日志
有时候慢查询日志较多,手动查看起来并不是很方便,好在 MySQL 提供了分析慢查询日志的工具 mysqldumpslow。
4.1 查询返回结果最多的 10 条 SQL:
mysqldumpslow -s r -t 10 /usr/local/mysql/data/localhost_slow.log
4.2 查询耗时最长的 10 条 SQL:
mysqldumpslow -s t -t 10 /usr/local/mysql/data/localhost_slow.log
原文:https://www.cnblogs.com/yidengjiagou/p/16553559.html
评论