SET GLOBAL slow_query_log = ON;
SET GLOBAL long_query_time = 1;
SET GLOBAL log_queries_not_using_indexes = ON;
mysqldumpslow -s t -t 10 /var/log/mysql/slow.log

接口偶发变慢但说不清是哪条 SQL,想开慢查询日志又担心影响线上性能。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,没有开启慢查询记录,或阈值设得过大导致问题语句根本没被记录。

「MySQL 慢查询日志」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。

别只看报错的最后一行,往上看几行,真正的起因通常在上面。同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。

处理上按这个顺序:在线开启并设置合理阈值;用工具按总耗时排序;针对前几条做 explain 分析。

改完只确认一件事:能找到耗时最长的几条语句,优化后慢查询数量明显减少。

作者 9823189