以下是MySQL自带慢日志排查慢查询SQL的完整攻略:
什么是MySQL自带慢日志
MySQL自带了一个慢日志(slow query log)功能,可以记录执行时间超过指定阈值的SQL语句,这样可以帮助我们排查性能问题、发现慢查询、优化SQL语句等。
如何开启MySQL慢日志功能
- 修改my.cnf配置文件,在[mysqld]下添加如下两行代码:
slow_query_log = 1 # 开启慢日志功能
slow_query_log_file = /var/log/mysql/slow.log # 慢日志输出文件路径
- 重启MySQL服务
sudo systemctl restart mysql
- 查看是否开启慢日志
show variables like '%slow_query_log%';
如何查看MySQL慢日志
MySQL慢日志输出的是一个文本文件,可以通过cat、less等命令查看。
cat /var/log/mysql/slow.log # 查看慢日志全部内容
less /var/log/mysql/slow.log # 分屏查看慢日志内容
可以看到每一行记录都包含了执行该SQL语句的时间、执行时间、返回行数、锁定时间等信息。
如何分析MySQL慢日志
我们可以通过分析慢日志文件中的SQL语句,找出哪些SQL语句执行时间过长,以及对这些SQL语句进行优化。
以下是一个慢日志示例:
# Query_time: 1.170887 Lock_time: 0.000021 Rows_sent: 5 Rows_examined: 555427
SELECT * FROM orders WHERE order_date > '2022-01-01';
可以看到,该SQL语句执行时间为1.170887秒,返回5行数据,查询了555427行。
我们可以对这个SQL语句进行优化,比如增加索引、减少查询范围等。
另一个示例:
# Query_time: 13.482723 Lock_time: 0.000031 Rows_sent: 0 Rows_examined: 3719866
DELETE FROM user WHERE user_id = 123;
可以看到,该SQL语句执行时间为13.482723秒,删除了一个用户。这个SQL语句执行时间过长,可以考虑减少删除范围、增加索引等优化。
综上所述,通过MySQL自带慢日志排查慢查询SQL,可以快速定位有性能问题的SQL,以及对这些SQL进行优化,提高数据库性能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL自带慢日志排查慢查询SQL - Python技术站