MySQL慢查询日志分析工具,可视化分析SQL

MySQL慢查询日志是定位数据库性能问题的第一手资料。
如果你发现网站响应变慢、CPU飙升,却不知道是哪条SQL拖垮了数据库,那么学会使用慢查询日志分析工具,尤其是可视化分析SQL,就能快速找到问题语句。
本文从零开始,带你完成日志开启、工具安装、数据采集和可视化展示,最终能独立排查慢查询。

开启慢查询日志并确认记录

默认情况下MySQL慢查询日志是关闭的,需要手动开启。
你可以通过命令行临时开启,也可以修改配置文件永久生效。

临时开启(重启失效)

登录MySQL后执行:

SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';

long_query_time表示超过多少秒的查询会被记录,建议先设为1秒,后续根据业务调整。

永久生效

编辑MySQL配置文件(通常位于/etc/mysql/my.cnf或/etc/my.cnf),在[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_queries_not_using_indexes会记录未使用索引的查询,方便发现潜在问题,但可能产生大量日志,建议按需开启。

修改后重启MySQL:systemctl restart mysqld。

验证是否生效

执行SHOW VARIABLES LIKE 'slow_query_log';,返回ON即成功。
然后手动执行一条SELECT SLEEP(2);,再查看慢日志文件是否出现记录:tail -f /var/log/mysql/slow.log。

使用pt-query-digest做命令行分析

Percona Toolkit中的pt-query-digest是最常用的慢查询日志分析工具,能汇总相似SQL并按耗时排序。

安装Percona Toolkit

CentOS/RHEL:

yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
yum install percona-toolkit

Debian/Ubuntu:

wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
dpkg -i percona-release_latest.generic_all.deb
apt update
apt install percona-toolkit

分析日志并生成报告

pt-query-digest /var/log/mysql/slow.log > slow_report.txt

报告会列出总查询数、执行时间分布、最慢的SQL等。
重点关注Response time和Calls,前者表示总耗时占比,后者是执行次数。

输出到数据库表以便可视化

pt-query-digest --review h=localhost,D=slow_log,t=query_review --create-review-table /var/log/mysql/slow.log

这样结果会存入MySQL表,后续可用Web程序读取展示。

搭建可视化分析界面

命令行报告不够直观,可以用开源工具如Anemometer或pt-visual-explain配合Web界面。
这里以Anemometer为例,它专门用于展示pt-query-digest存入数据库的结果。

环境要求

  • Web服务器(Nginx/Apache)
  • PHP 7.x及以上
  • MySQL数据库(存储分析结果)

部署步骤

  1. 下载Anemometer源码放入网站目录:
   git clone https://github.com/box/Anemometer.git /var/www/anemometer
  1. 导入表结构:
   mysql -uroot -p < /var/www/anemometer/install.sql
  1. 修改配置文件conf/config.inc.php,填写数据库连接信息:
   $conf['datasources']['localhost'] = array(
       'host' => '127.0.0.1',
       'port' => 3306,
       'db'   => 'slow_query_log',
       'user' => 'root',
       'password' => '你的密码',
   );
  1. 配置Web服务器指向该目录,确保PHP可执行。
  2. 浏览器访问http://你的服务器IP/anemometer,即可看到可视化界面,包括查询列表、执行时间趋势图、索引缺失提示等。

定期采集数据

添加定时任务,每小时分析一次慢日志并写入数据库:

0 * * * * pt-query-digest --review h=localhost,D=slow_query_log,t=query_review --create-review-table /var/log/mysql/slow.log

避坑与效果验证

常见坑点

  • 日志文件路径权限:MySQL用户必须对日志目录有写权限,否则无法记录。
  • long_query_time设得太小会导致日志暴涨,建议先设1秒,观察后再调整。
  • pt-query-digest分析大文件时可能占用较多内存,可先用--limit限制处理条数。
  • 可视化工具需要PHP环境,注意版本兼容性,Anemometer对PHP 7.4+支持较好。

验证分析效果

完成上述步骤后,在可视化界面应能看到慢查询的统计图表。
如果图表为空,检查:

  • 慢日志是否确实有记录
  • pt-query-digest是否成功写入数据库
  • 配置文件中的数据库连接是否正确

独立结论

判断慢查询优化优先级时,优先处理Response time占比高且Calls次数多的SQL。

如果日志中大量出现未使用索引的查询,考虑为相关字段添加索引。

可视化工具的价值在于持续监控,建议将慢查询日志分析纳入日常运维流程,每周回顾一次。

常见疑问

慢查询日志会影响性能吗?

开启日志本身有轻微开销,但远小于慢查询带来的影响。
生产环境建议开启,并设置合理的long_query_time。

pt-query-digest和MySQL自带mysqldumpslow有什么区别?

mysqldumpslow功能简单,只做基础聚合;
pt-query-digest支持更多维度分析(如按用户、按数据库),且能输出到数据库供可视化使用,更适合深度优化。

可视化工具必须用Anemometer吗?

不是,也可以使用Percona Monitoring and Management (PMM)或商业工具,但Anemometer轻量、开源,适合中小规模环境。

如何避免日志文件过大?

可以配置日志轮转,例如使用logrotate,或定期归档旧日志。
同时避免长期开启log_queries_not_using_indexes。

完成以上配置后,你就拥有了一套从采集到可视化的慢查询分析流程。
遇到性能问题不再盲目,而是有数据支撑地优化SQL。

分享到:
上一篇
MySQL数据库只读锁,维护期间锁定站点写入
下一篇
Redis哨兵Sentinel部署
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意