与 postgresql 的 pg_stat_statements 类似,mysql 也有自己的慢查询日志(slow query log)机制,用于记录执行时间过长的 sql 语句。
下面是查看 mysql 慢日志的完整指南。
⚙️ 第一步:开启与配置慢日志
mysql 的慢日志功能默认是关闭的,需要手动开启。你可以选择“临时开启”或“永久开启”。
1. 临时开启(适合临时诊断,重启后失效)
通过 mysql 命令行进行设置,无需重启服务
-- 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] 段落下添加或修改以下配置:
[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 命令行中执行:
show variables like 'slow_query_log_file';
查看日志内容:在服务器终端,使用 tail、cat、less 等命令查看文件。
# 实时监控最新的慢查询(推荐) sudo tail -f /var/log/mysql/slow.log # 查看整个文件 sudo cat /var/log/mysql/slow.log
一个典型的慢日志条目会包含执行时间、锁等待时间、扫描行数等关键信息。
2. 从表中查询(备选)
mysql 也支持将慢日志输出到数据库的表中。
配置输出目标:
set global log_output = 'table';
查询日志表:
select * from mysql.slow_log;
📊 第三步:分析慢日志(使用工具)
直接查看原始日志文件对于分析大量数据来说效率很低。mysql 提供了强大的分析工具来帮你快速定位问题。
1.mysqldumpslow(mysql 自带)
这是官方提供的工具,可以将相似的查询(除了具体的数值)进行归类汇总,非常实用。
常用用法:
# 按平均查询时间排序,显示前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 更加强大和灵活,能生成非常详细的分析报告,是业界公认的最佳实践。
sudo apt-get install percona-toolkit
常用用法:
# 生成一份完整的慢查询分析报告 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 生成深度报告。
到此这篇关于mysql慢日志的实现示例的文章就介绍到这了,更多相关mysql慢日志内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论