mysql慢日志

mysql慢日志 与 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 命令行中执行sqlSHOW 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 也支持将慢日志输出到数据库的表中。配置输出目标sqlSET GLOBAL log_output TABLE;查询日志表sqlSELECT * FROM mysql.slow_log; 第三步分析慢日志使用工具直接查看原始日志文件对于分析大量数据来说效率很低。MySQL 提供了强大的分析工具来帮你快速定位问题。1.mysqldumpslowMySQL 自带这是官方提供的工具可以将相似的查询除了具体的数值进行归类汇总非常实用。常用用法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.logs参数常用值t按查询时间排序at按平均查询时间排序c按执行次数排序l按锁等待时间排序2.pt-query-digestPercona Toolkit功能更强大这是一个第三方工具功能比mysqldumpslow更加强大和灵活能生成非常详细的分析报告是业界公认的最佳实践。安装以 Ubuntu 为例bashsudo 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 --since12h /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生成深度报告。