与 PostgreSQL 的pg_stat_statements类似,MySQL 也有自己的慢查询日志(Slow Query Log)机制,用于记录执行时间过长的 SQL 语句。
下面是查看 MySQL 慢日志的完整指南。
⚙️ 第一步:开启与配置慢日志
MySQL 的慢日志功能默认是关闭的,需要手动开启。你可以选择“临时开启”或“永久开启”。
1. 临时开启(适合临时诊断,重启后失效)
通过 MySQL 命令行进行设置,无需重启服务。
sql
-- 1. 开启慢查询日志 SET GLOBAL slow_query_log = 'ON'; -- 2. 设置“慢”的阈值(单位:秒),例如设为2秒 SET GLOBAL long_query_time = 2; -- 3. (可选)记录所有未使用索引的查询,即使它们很快 SET GLOBAL log_queries_not_using_indexes = 'ON'; -- 4. (可选)指定日志文件路径 SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';
2. 永久开启(修改配置文件)
编辑 MySQL 的配置文件(通常是my.cnf或my.ini),在[mysqld]段落下添加或修改以下配置:
ini
[mysqld] slow_query_log = 1 slow_query_log_file = /var/log/mysql/slow.log long_query_time = 2 log_queries_not_using_indexes = 1
修改后,需要重启 MySQL 服务才能使配置永久生效。
🔍 第二步:查看慢日志
配置生效后,MySQL 就会开始记录慢查询。你可以通过以下方式查看日志内容。
1. 直接查看日志文件(最常用)
这是最直接的方法。首先,你需要知道日志文件的位置。
查找日志文件位置:在 MySQL 命令行中执行:
sql
SHOW VARIABLES LIKE 'slow_query_log_file';
查看日志内容:在服务器终端,使用
tail、cat、less等命令查看文件。bash
# 实时监控最新的慢查询(推荐) sudo tail -f /var/log/mysql/slow.log # 查看整个文件 sudo cat /var/log/mysql/slow.log
一个典型的慢日志条目会包含执行时间、锁等待时间、扫描行数等关键信息。
2. 从表中查询(备选)
MySQL 也支持将慢日志输出到数据库的表中。
配置输出目标:
sql
SET GLOBAL log_output = 'TABLE';
查询日志表:
sql
SELECT * FROM mysql.slow_log;
📊 第三步:分析慢日志(使用工具)
直接查看原始日志文件对于分析大量数据来说效率很低。MySQL 提供了强大的分析工具来帮你快速定位问题。
1.mysqldumpslow(MySQL 自带)
这是官方提供的工具,可以将相似的查询(除了具体的数值)进行归类汇总,非常实用。
常用用法:
bash
# 按平均查询时间排序,显示前10条最慢的查询 mysqldumpslow -s t -t 10 /var/log/mysql/slow.log # 按查询次数排序,找出执行最频繁的慢查询 mysqldumpslow -s c /var/log/mysql/slow.log # 按锁等待时间排序 mysqldumpslow -s l /var/log/mysql/slow.log
s参数常用值:
t:按查询时间排序at:按平均查询时间排序c:按执行次数排序l:按锁等待时间排序
2.pt-query-digest(Percona Toolkit,功能更强大)
这是一个第三方工具,功能比mysqldumpslow更加强大和灵活,能生成非常详细的分析报告,是业界公认的最佳实践。
安装(以 Ubuntu 为例):
bash
sudo apt-get install percona-toolkit
常用用法:
bash
# 生成一份完整的慢查询分析报告 pt-query-digest /var/log/mysql/slow.log # 将报告输出到文件 pt-query-digest /var/log/mysql/slow.log > slow_report.txt # 只分析最近12小时的慢查询 pt-query-digest --since=12h /var/log/mysql/slow.log
☁️ 特殊情况:云数据库(RDS 等)
如果你使用的是云数据库(如阿里云 RDS、腾讯云 CDB 等),操作方式会有所不同:
你无法直接登录服务器修改配置文件或查看日志文件。
你需要登录云厂商的Web 控制台,在数据库实例的管理页面找到“参数设置”或“参数组”,修改
slow_query_log、long_query_time等相关参数。开启后,同样在控制台的“日志管理”或“慢日志”页面,可以查看、下载或通过内置的分析工具来分析慢查询。
💎 总结
总的来说,查看 MySQL 慢日志的步骤可以概括为:
开启日志:通过
SET GLOBAL临时开启,或修改my.cnf永久开启。查看日志:使用
tail -f实时监控,或查询mysql.slow_log表。分析日志:使用
mysqldumpslow快速分析,或使用pt-query-digest生成深度报告。