mysql如何开启慢查询日志_mysql慢查询日志配置

2次阅读

mysql慢查询日志是定位 性能瓶颈 最直接有效的手段,需合理配置 long_query_time(建议 0.5~2 秒)、验证写入有效性,并通过 mysqldumpslow 或 EXPLai N 分析优化。

mysql 如何开启慢查询日志_mysql 慢查询日志配置

MySQL 慢查询日志是定位 性能瓶颈 最直接有效的手段之一。开启它不难,但关键在于配置合理、验证到位、日志可用——尤其要注意 临时设置不持久 阈值设太大会漏掉真实慢 SQL这两个常见坑。

确认当前状态并检查参数

登录 MySQL 后,先执行以下命令查看慢查询日志是否已启用及当前配置:

  • SHOW varIABLES LIKE ‘slow_query_log’; —— 若返回 OFF,说明未开启
  • SHOW VARIABLES LIKE ‘slow_query_log_file’; —— 查看日志默认路径(如 /var/lib/mysql/hostname-slow.log)
  • SHOW VARIABLES LIKE ‘long_query_time’; —— 默认通常是 10 秒,生产环境建议调低到 0.5~2 秒
  • SHOW VARIABLES LIKE ‘log_queries_not_using_indexes’; —— 可选开启,用于捕获未走索引的查询

两种开启方式:临时生效 or 永久生效

临时开启适合测试或紧急排查,修改后立即生效但重启 MySQL 会丢失;永久开启需改 配置文件,适合生产环境。

  • 临时开启(无需重启):
    SET GLOBAL slow_query_log = ‘ON’;
    SET GLOBAL long_query_time = 1;
    SET GLOBAL slow_query_log_file = ‘/var/log/mysql/slow.log’;
    SET GLOBAL log_queries_not_using_indexes = ‘ON’;
  • 永久开启(推荐):
    编辑 MySQL 配置文件linux 常为 /etc/my.cnf/etc/mysql/mysql.conf.d/mysqld.cnfwindows 为 my.ini),在 [mysqld] 段下添加:[mysqld]
    slow_query_log = ON
    slow_query_log_file = /var/log/mysql/slow.log
    long_query_time = 1
    log_queries_not_using_indexes = ON
    log_output = FILE

    保存后重启 MySQL:systemctl restart mysql(或 mysqld)

验证日志是否真正记录

不能只看变量值为 ON 就认为成功——必须实测写入。

  • 执行一条“人工慢 SQL”:select SLEEP(2);(确保超过 long_query_time)
  • 检查慢查询计数是否增加:SHOW GLOBAL STATUS LIKE ‘Slow_queries’;
  • 直接查看日志文件:tail -f /var/log/mysql/slow.log(注意:MySQL 进程需对日志路径有写权限)
  • 若用 log_output = table,可查表:SELECT * FROM mysql.slow_log LIMIT 5;

后续分析与优化建议

日志有了,下一步才是重点:

  • 用官方 工具 快速汇总:mysqldumpslow -s t -t 10 /var/log/mysql/slow.log(按耗时排序取前 10 条)
  • 重点关注 Rows_examined(扫描行数)远大于 Rows_sent(返回行数)的语句,大概率缺索引或条件写法不佳
  • 对高频慢 SQL,结合 EXPLAIN 分析执行计划,优先考虑添加复合索引、避免 SELECT *
  • 注意:数据量极小时 MySQL 可能主动放弃索引走全表扫描,这类也会被 log_queries_not_using_indexes 记录,需结合实际数据量判断是否真有问题
站长
版权声明:本站原创文章,由 站长 2025-12-24发表,共计1515字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
1a44ec70fbfb7ca70432d56d3e5ef742
text=ZqhQzanResources