17人参与 • 2026-08-05 • Mysql
与 postgresql 的 pg_stat_statements 类似,mysql 也有自己的慢查询日志(slow query log)机制,用于记录执行时间过长的 sql 语句。
下面是查看 mysql 慢日志的完整指南。
mysql 的慢日志功能默认是关闭的,需要手动开启。你可以选择“临时开启”或“永久开启”。
通过 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';
编辑 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 就会开始记录慢查询。你可以通过以下方式查看日志内容。
这是最直接的方法。首先,你需要知道日志文件的位置。
查找日志文件位置:在 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
一个典型的慢日志条目会包含执行时间、锁等待时间、扫描行数等关键信息。
mysql 也支持将慢日志输出到数据库的表中。
配置输出目标:
set global log_output = 'table';
查询日志表:
select * from mysql.slow_log;
直接查看原始日志文件对于分析大量数据来说效率很低。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 参数常用值:
这是一个第三方工具,功能比 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、腾讯云 cdb 等),操作方式会有所不同:
总的来说,查看 mysql 慢日志的步骤可以概括为:
到此这篇关于mysql慢日志的实现示例的文章就介绍到这了,更多相关mysql慢日志内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论