mysql安装完成后如何开启慢查询日志_mysql性能监控配置

1次阅读

执行show variables like ‘slow_query_log’;若返回off则未开启,需通过set global临时启用或修改配置文件永久开启。

mysql安装完成后如何开启慢查询日志_mysql性能监控配置

怎么确认慢查询日志当前没开?

安装完 mysql 默认是关闭慢查询日志的,slow_query_log 值为 OFF。别猜,直接连上 MySQL 执行:
SHOW VARIABLES LIKE 'slow_query_log';
如果返回 ValueOFF,那就得手动开;顺手再查下阈值:SHOW VARIABLES LIKE 'long_query_time';,默认是 10 秒——对现代业务来说太宽松了,基本等于没开。

临时开启:快速验证是否生效

适合刚装好想立刻测试,或临时排查问题。执行三条命令即可:

  • SET GLOBAL slow_query_log = 'ON';
  • SET GLOBAL long_query_time = 1;(建议先设成 1 秒,比默认 10 秒更敏感)
  • SET GLOBAL log_queries_not_using_indexes = 'ON';(可选但强烈推荐,能抓到“没走索引”的隐患 SQL)

注意:SET GLOBAL 只影响新建立的连接,已存在的连接不会自动继承;且服务重启后全部失效。验证是否写入日志,可执行:select SLEEP(2);,然后去日志文件里搜这句——别只看命令回显,要看日志落盘才算真生效。

永久开启:改配置文件 + 重启服务

windows 下找 my.inilinux/macos 下找 /etc/my.cnf/etc/mysql/mysql.conf.d/mysqld.cnf,在 [mysqld] 段落下加这几行:

[mysqld] slow_query_log = 1 slow_query_log_file = /var/log/mysql/slow.log long_query_time = 1 log_queries_not_using_indexes = 1 log_output = FILE

关键点:

  • log_output 必须显式设为 FILE,否则即使开了日志,也可能默默写进表(mysql.slow_log),而你根本不知道它在哪;
  • slow_query_log_file 路径要确保 MySQL 进程有写权限,尤其 Linux 上常因权限不足导致日志“静默失败”;
  • 改完必须重启 MySQL 服务,Windows 用 net stop mysql && net start mysql,Linux 用 systemctl restart mysqld

日志怎么看?别用手翻

日志文件本身是纯文本,但直接打开看效率极低。优先用 MySQL 自带工具:
mysqldumpslow -s t -t 10 /var/log/mysql/slow.log
这条命令按总耗时(-s t)倒序,取前 10 条最慢的 SQL。常见坑:

  • 日志里可能包含大量 SELECT SLEEP(...) 测试语句,干扰判断,上线前记得关掉测试配置;
  • 如果看到大量 Rows_examined 极高、但 Rows_sent 很小的 SQL,基本就是缺索引或写了 SELECT * + WHERE 条件不匹配索引;
  • log_queries_not_using_indexes 开启后,会记录所有未走索引的查询——哪怕它本身很快,也得检查,因为数据量一涨就崩。

真正难的不是开日志,而是从日志里区分“偶发抖动”和“结构性瓶颈”。比如一条 SQL 平均 800ms,但 P95 是 3s,那大概率是锁竞争或大结果集排序,不是简单加个索引能解决的。

text=ZqhQzanResources