首先启用MySQL慢查询日志并配置long_query_time等参数,随后使用mysqldumpslow汇总高频慢SQL,再通过pt-query-digest进行深度分析获取执行指标,结合iotop、htop等Linux工具排查系统资源瓶颈,最后利用EXPLAIN优化语句并建立监控告警机制以提升数据库性能。

分析慢查询日志是排查数据库性能瓶颈的关键步骤,尤其在Linux环境下,结合系统工具和数据库配置,可以快速定位问题SQL并优化执行效率。以下是如何在Linux中分析MySQL慢查询日志的完整流程。
启用并配置慢查询日志
确保MySQL已开启慢查询日志功能,否则无法收集数据。可通过修改配置文件或动态设置参数实现:
- 编辑/etc/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf
- 添加或确认以下配置项:
[mysqld] slow_query_log = ON slow_query_log_file = /var/log/mysql/mysql-slow.log long_query_time = 1 log_queries_not_using_indexes = ON
- long_query_time 设置为1表示执行时间超过1秒的查询将被记录,可根据业务调整
- 重启MySQL服务或使用SET GLOBAL命令动态启用
使用mysqldumpslow分析日志
MySQL自带mysqldumpslow工具,可汇总慢查询日志中的高频SQL:
- 查看最耗时的前10条语句:
mysqldumpslow -s t -t 10 /var/log/mysql/mysql-slow.log - 按出现次数排序,找出频繁执行的慢查询:
mysqldumpslow -s c -t 10 /var/log/mysql/mysql-slow.log - 过滤特定用户或IP的查询(支持grep配合):
mysqldumpslow -g 'SELECT.*user_name' /var/log/mysql/mysql-slow.log
该工具能自动聚合相似SQL(如不同参数的同一语句),便于识别模式。
使用pt-query-digest进行深度分析
Percona Toolkit中的pt-query-digest功能更强大,适合复杂场景:
- 安装Percona Toolkit(Ubuntu/Debian):
apt install percona-toolkit - 生成详细报告:
pt-query-digest /var/log/mysql/mysql-slow.log > slow_report.txt - 输出内容包括:执行总次数、平均响应时间、锁等待时间、扫描行数、索引使用情况等
- 支持直接分析当前正在运行的查询:
pt-query-digest --processlist h=localhost
推荐用于生产环境的定期性能审计。
结合Linux系统命令辅助排查
在分析SQL的同时,利用Linux工具观察系统资源使用情况:
- 用iotop查看磁盘IO是否成为瓶颈
- 用htop监控CPU和内存占用,判断是否因资源争抢导致延迟
- 通过lsof -p $(pidof mysqld)查看MySQL打开的文件描述符,确认日志路径正确
- 使用tail -f /var/log/mysql/mysql-slow.log实时观察新增慢查询
多维度交叉验证,有助于区分是SQL本身问题还是系统负载过高所致。
基本上就这些。关键在于持续监控、定期分析,并结合执行计划(EXPLAIN)优化具体SQL语句。建立慢查询告警机制,能有效提升数据库稳定性。











